我在模仿外部web服务时跟踪本教程:
Router router = new RoutingDsl().build();
Server server = Server.forRouter(router);
WSClient ws = WS.newClient(server.getHttpPort());在创建服务器时,将启动Akka系统。日志提到了一些绑定到127.0.0.1:2551。我相信是Netty,它是Akka用的。
当我创建WS客户端时,一些服务(我相信Netty)也尝试绑定到同一个地址,并在address already in use中失败。
我尝试在application.conf中重新配置我的application.conf,以使用不同的端口,但这两个服务似乎都在争夺同一个端口。
如何让服务器和WS客户端实例化?
谢谢。
更新- application.conf提供(注释和空对象省略)
appName = myApplication
akka {
log-config-on-start = true
actor {
provider = "cluster"
}
actor-system = ${appName}
cluster {
metrics {
enabled = off
native-library-extract-folder = ${user.dir}/target/native
}
pub-sub {
name = distributedPubSubMediator
role = ""
routing-logic = broadcast
gossip-interval = 1s
removed-time-to-live = 120s
max-delta-elements = 3000
use-dispatcher = ""
}
seed-nodes = [
"akka.tcp://"${appName}"@127.0.0.1:2551"
]
}
extensions = [
"akka.cluster.metrics.ClusterMetricsExtension",
"akka.cluster.pubsub.DistributedPubSub"
]
remote {
log-remote-lifecycle-events = on
enabled-transports = ["akka.remote.netty.tcp"] # needed ?
netty.tcp {
hostname = "127.0.0.1"
port = 3551
}
}
}
play.crypto.secret = "mySecret"
play.modules {
enabled += libs.clients.playaero.Module
enabled += libs.clients.playelastic.Module
enabled += libs.clients.playfacebook.Module
enabled += controller.akka.Module
enabled += model.Module
enabled += settings.Module
}
play.i18n {
langs = [ "en" ]
}发布于 2016-12-30 15:24:28
正如您所预期的,Server.fromRouter和WS.newClient都创建了一个新的Akka ActorSystem (请注意,由于这个原因,WS.newClient也被废弃了,至少在外部测试是如此)。
如果启用了Akka,那么每个生成的系统都需要自己的端口来监听(根据文档)。
即使参与者系统有不同的名称,端口号对于同一台机器上的每个参与者系统也必须是唯一的。这是因为每个参与者系统都有自己的网络子系统,侦听连接和处理消息以避免干扰其他参与者系统。
最快的解决方案是在您的application.conf文件夹中创建一个test/resources,将设置带回到本地
akka.actor.provider = "local"https://stackoverflow.com/questions/41375619
复制相似问题