远程连接AKKA中的两台机器,连接被拒绝

时间:2018-11-20 12:14:28

标签: scala akka

我是akka的新手,我想使用akka远程连接两台PC,只是以两个角色的身份同时在其中运行一些代码。我已经在akka doc中尝试过该示例。但是我真正要做的是将2个IP地址添加到配置文件中,我总是会收到此错误?

第一台机器给我这个错误:

  

[信息] [错误] [11/20/2018 13:58:48.833]   [ClusterSystem-akka.remote.default-remote-dispatcher-6]   [akka.remote.artery.Association(akka:// ClusterSystem)]出站   控制流到[akka://ClusterSystem@192.168.1.2:2552]失败。   重新启动它。与[akka://ClusterSystem@192.168.1.2:2552]握手   在20000毫秒内未完成   (akka.remote.artery.OutboundHandshake $ HandshakeTimeoutException:   与[akka://ClusterSystem@192.168.1.2:2552]握手没有   在20000毫秒内完成)

第二台机器:

  

线程“主”中的异常   akka.remote.RemoteTransportException:无法将TCP绑定到   [192.168.1.3:2552]由于:绑定失败,原因是   java.net.BindException:无法分配请求的地址:bind

配置文件内容:

akka {
  actor {
    provider = cluster
  }
  remote {
    artery {
      enabled = on
      transport = tcp
      canonical.hostname = "192.168.1.3"
      canonical.port = 0
    }
  }
  cluster {
    seed-nodes = [
      "akka://ClusterSystem@192.168.1.3:2552",
      "akka://ClusterSystem@192.168.1.2:2552"]

    # auto downing is NOT safe for production deployments.
    # you may want to use it during development, read more about it in the docs.
    auto-down-unreachable-after = 120s
  }
}

# Enable metrics extension in akka-cluster-metrics.
akka.extensions=["akka.cluster.metrics.ClusterMetricsExtension"]

# Sigar native library extract location during tests.
# Note: use per-jvm-instance folder when running multiple jvm on one host.
akka.cluster.metrics.native-library-extract-folder=${user.dir}/target/native

1 个答案:

答案 0 :(得分:0)

首先,您不需要为AKKA远程处理添加集群配置。这样一来,无论是PC还是节点,都应该使用一个具体的端口而不是“ 0”来启用远程处理,这样您就知道要连接哪个端口。

具有以下配置

PC1

akka {
  actor {
    provider = remote
  }
  remote {
    artery {
      enabled = on
      transport = tcp
      canonical.hostname = "192.168.1.3"
      canonical.port = 19000
    }
  }
} 

PC2

akka {
  actor {
    provider = remote
  }
  remote {
    artery {
      enabled = on
      transport = tcp
      canonical.hostname = "192.168.1.4"
      canonical.port = 18000
    }
  }
} 

使用以下actor路径将PC1远程的任何actor连接到PC2

akka://<PC2-ActorSystem>@192.168.1.4:18000/user/<actor deployed in PC2>

使用下面的actor路径从PC2连接到PC1

akka://<PC2-ActorSystem>@192.168.1.3:19000/user/<actor deployed in PC1>

端口号和IP地址为示例。