【问题标题】:How can I look up a reference to a remote actor from a different system in akka?如何在akka中查找来自不同系统的远程actor的引用?
【发布时间】:2013-10-25 21:00:09
【问题描述】:

我有一个 ActorSystem 在端口 2552 上运行,另一个在端口 2553 上运行。他们每个人都创建了一个 Actor 来实例化一个单例对象。我现在想创建另一个系统来管理这两个系统并且可以引用这些参与者以便同时使用单例。

我知道演员正在监听端口,因为它为每个端口提供了这样的日志

 Remoting started; listening on addresses :[akka.tcp://singletonApplication@127.0.0.1:2552]

当我使用调试器查看对象时,演员会像这样显示

 Actor[akka://singletonApplication/user/singleton]

我使用创建经理系统

 ActorSystem system = ActorSystem.create("managerSystem");

但是当我尝试通过以下行引用远程演员时

 system.actorSelection("akka.tcp://singletonApplication@127.0.0.1:2552/user/singleton");

它在对象中给了我这个

 ActorSelection[Actor[akka://managerApplication/deadLetters]/user/singleton]

当我尝试向它发送一条消息时,它会在控制台中给我一个死信错误日志 我不太确定我做错了什么,但看起来我试图用来查找远程演员的系统正在搞乱我的 actorSelection 调用。我是否需要在同一个系统中才能引用远程参与者?我认为这是使用 akka 的要点之一?

【问题讨论】:

  • 您应该检查您的 akka 配置,并确保您在尝试查找远程参与者的系统中使用的是 RemoteActorRefProvider 而不是默认的 LocalActorRefProvider。
  • 是的,cmbaxter 很可能是正确的,如果您使用 RemoteActorRefProvider(或 ClusterActorRefProvider)获得此输出,那么请提交错误。

标签: java akka remoting


【解决方案1】:

您是说您正在从不同的系统访问远程参与者。但我看到您正在使用 127.0.0.1 来寻址远程系统。 127.0.0.1 是一个特殊的环回地址,指的是本地机器。所以你需要提供可寻址的IP来访问远程机器。

有关 Loopback 的更多信息,请查看http://en.wikipedia.org/wiki/Loopback

这在documentation中也有明确说明:

"注意

如果您部署到多台机器上,请务必将默认 IP 127.0.0.1 替换为系统可访问的真实地址! "

【讨论】:

  • 是的,但我在本地测试它,所以现在我通过不同的应用程序和不同的端口在同一台机器上运行演员。
  • 但是我看到你的端口也和你的帖子一样( 2552 )
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-04
  • 2012-11-30
  • 2013-02-06
  • 2015-09-09
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
相关资源
最近更新 更多