首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过wsClient创建模拟服务器后无法创建RoutingDsl

通过wsClient创建模拟服务器后无法创建RoutingDsl
EN

Stack Overflow用户
提问于 2016-12-29 08:13:16
回答 1查看 89关注 0票数 0

我在模仿外部web服务时跟踪本教程

代码语言:javascript
复制
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提供(注释和空对象省略)

代码语言:javascript
复制
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" ]
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-30 15:24:28

正如您所预期的,Server.fromRouterWS.newClient都创建了一个新的Akka ActorSystem (请注意,由于这个原因,WS.newClient也被废弃了,至少在外部测试是如此)。

如果启用了Akka,那么每个生成的系统都需要自己的端口来监听(根据文档)。

即使参与者系统有不同的名称,端口号对于同一台机器上的每个参与者系统也必须是唯一的。这是因为每个参与者系统都有自己的网络子系统,侦听连接和处理消息以避免干扰其他参与者系统。

最快的解决方案是在您的application.conf文件夹中创建一个test/resources,将设置带回到本地

代码语言:javascript
复制
akka.actor.provider = "local"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41375619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档