带有bind-port和bind-hostname的Akka Cluster

时间:2015-07-09 19:35:50

标签: docker akka akka-cluster amazon-ecs

在application.conf中配置bind-hostname和bind-port(由Akka FAQ指定)并启动集群后,我收到错误:

[ERROR] [07/09/2015 19:54:24.132] [default-akka.remote.default-remote-dispatcher-20] 
[akka.tcp://default@54.175.105.30:2552/system/endpointManager/reliableEndpointWriter-akka.tcp%3A%2F%2Fdefault%4054.175.105.30%3A2552-757/endpointWriter]
dropping message [class akka.actor.ActorSelectionMessage] 
for non-local recipient[Actor[akka.tcp://default@54.175.105.30:32810/]] 
arriving at [akka.tcp://default@54.175.105.30:32810] 
inbound addresses are [akka.tcp://default@54.175.105.30:2552]

这似乎是说演员收到了一条发往端口32810(外部端口)的消息,但由于内部端口(2552)不匹配而丢弃它。

该文件的相关部分是:

  hostname = 54.175.105.30
  port = 32810

  bind-hostname = 172.17.0.44
  bind-port = 2552

我已经在2.4-M1,2.4-M2和2.4-SNAPSHOT上尝试了这一点,但效果相同。

之前还有其他人遇到过这个吗?有什么建议吗?

编辑: 此actor系统在Docker容器中的ECS中运行。 docker容器配置设置为从短暂范围转发到容器的私有IP上的2552。 ECS成功将hostname:port映射到bind-hosname:bind-port。该actor已成功运行并绑定到本地bind-hostname和bind-port,但正在丢弃消息并发出上述错误。

2 个答案:

答案 0 :(得分:6)

bind-*配置设置适用于在NAT后(或在docker容器中)启动Akka节点的情况。您是否配置了从hostnameportbind-hostnamebind-port的地址转换?

在您的特定配置中,当您执行

ctx.actorSelection("akka.tcp://default@54.175.105.30:32810/user/actor") ! "Hi"

然后54.175.105.30的某个人应该正在侦听TCP端口32810并将端口转发到172.17.0.44:2552。 actor系统应该在172.17.0.44:2552处使用您提供的配置运行。是这种情况吗?

此外,您必须为NAT后面的每个节点配置此项,因为Actor系统之间的连接是peer to peer

答案 1 :(得分:1)

这是由于我的错误配置。剩下的一些样板代码覆盖了bind-port。