如何调试akka关联进程?

时间:2014-12-09 10:25:04

标签: scala akka virtualbox redhat

以下是一个场景:

  1. 我已经将spala项目打包到jar文件中。
  2. 在Virtual Box上的RedHat 6.5上启动jar文件(ip-192.168.1。 38
  3. 在Virtual Box上的RedHat 6.5上启动jar文件(ip - 192.168.1。 41
  4. 一切都在本地运行 - 我可以向每个虚拟机发送REST请求并获得响应。
  5. 问题

    Akka系统无法成为集群。我使用默认设置运行192.168.1。 38 ,但192.168.1。 41 有一个额外的属性 - akka.cluster.seed-nodes,设置为{{1 }}。所以我得到了:

    akka.tcp://mySystem@192.168.1.38:2551

    没有其他错误或警告。另外,我如何测试akka关联或打印调试akka关联设置?

    Linux设置也可以影响到akka协会吗?

1 个答案:

答案 0 :(得分:2)

最有可能iptables阻止特定端口,如果您的测试配置只是禁用iptables。

service iptables save
service iptables stop
chkconfig iptables off

service ip6tables save
service ip6tables stop
chkconfig ip6tables off

如果无法尝试使用命令SELinux检查getenforce配置,并且出于测试目的相同,则可以完全禁用它。 SELinux manual

如果是application.conf,请尝试对每个节点使用以下配置:

 akka {

  log-dead-letters = on
  loglevel = "debug"

  actor
  {
    provider = "akka.cluster.ClusterActorRefProvider"
  }
  extensions = ["akka.contrib.pattern.ClusterReceptionistExtension"]

  remote {
    log-remote-lifecycle-events = off
    netty.tcp {
      port = 6001
    }
  }
  cluster {
    seed-nodes = [
      "akka.tcp://ActorSystem@192.168.1.38:6001",
      "akka.tcp://ActorSystem@192.168.1.41:6001"
    ]
    auto-down-unreachable-after = 10s
  }
}

与群集节点相关的所有日志都记录为info,但在测试环境中具有debug日志级别通常是个好主意。

当第二个节点加入群集时,您应该注意到以下日志:

INFO  [ActorSystem-akka.actor.default-dispatcher-4] [Cluster(akka://ActorSystem)]   - Cluster Node [akka.tcp://ActorSystem@10.0.1.41:6001] - Marking node(s) as REACHABLE [Member(address = akka.tcp://ActorSystem@10.0.1.41:6001, status = Up)]

也可以使用jmx akka.Cluster MXBean

监控群集状态
{   "self-address": "akka.tcp://ActorSystem@10.0.1.82:6001",   "members": [     {       "address": "akka.tcp://ActorSystem@10.0.1.82:6001",       "status": "Up"     }   ],   "unreachable": [        ] }