阿卡IO(TCP)得到CommandFailed的原因(Akka IO(Tcp) get reaso

2019-10-21 20:42发布

我有使用IO(TCP)演员的以下示例https://gist.github.com/flirtomania/a36c50bd5989efb69a5f

对于实验的缘故,我已经两次运行它,所以它试图绑定到803端口。 很显然,我已经得到了一个错误。

问:我怎样才能知道为什么“CommandFailed”的原因是什么? 在application.conf我已经启用SLF4J和日志的调试级别,然后我在我的日志中得到一个错误。

DEBUG akka.io.TcpListener - Bind failed for TCP channel on endpoint [localhost/127.0.0.1:803]: java.net.BindException: Address already in use: bind

但是,为什么只有调试级别? 我不想让所有ActorSystem记录他们的活动,我想CommandFailed事件的原因(如java.lang.Exception的情况下,我可以让e.printStackTrace()

类似: case c @ CommandFailed => val e:Exception = c.getReason()

也许这不是阿卡路? 如何获取诊断信息呢?

Answer 1:

这里是你可以做什么 - 发现仍保持生活,然后杀死它的PID。

在Mac上 -

lsof的-i:端口号,然后杀-9 PidNumber



Answer 2:

我明白,你有2个问题。

  1. 如果您同时运行相同的代码,机器人演员都试图绑定到相同的端口(在你的情况, 803 ),除非绑定一个解除绑定并关闭,以便其他人可以绑定连接这是不可能的。
  2. 你可以导入akka.event.Logging并把val log = Logging(context.system, this)在你的角色的开始,这将记录你的所有演员的活动,并...这也说明了演员的名字,相应演员系统和主机+端口(如果你使用的是阿卡集群)。

希望帮助



文章来源: Akka IO(Tcp) get reason of CommandFailed
标签: scala akka