【问题标题】:Akka IO(Tcp) get reason of CommandFailedAkka IO(Tcp) 获取 CommandFailed 的原因
【发布时间】:2015-02-12 13:12:52
【问题描述】:

我有以下使用 IO(Tcp) 的 Actor 示例 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()

也许这不是 Akka 方式?那么如何获取诊断信息呢?

【问题讨论】:

    标签: scala akka


    【解决方案1】:

    您可以执行以下操作 - 找到仍然存在的 PID,然后将其杀死。

    在 Mac 上 -

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

    【讨论】:

      【解决方案2】:

      我了解到您有 2 个问题。

      1. 如果您同时运行相同的代码,bot 参与者会尝试绑定到同一个端口(在您的情况下为 803),除非绑定的一个取消绑定并关闭连接以便另一个可以绑定,否则这是不可能的.
      2. 你可以导入akka.event.Logging并将val log = Logging(context.system, this)放在你的actors的开头,这将记录你的actors的所有活动并且...... 它还显示了参与者的名称、相应的参与者系统和主机+端口(如果您使用的是 akka-cluster)。

      希望对您有所帮助

      【讨论】:

        猜你喜欢
        • 2014-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-11
        • 1970-01-01
        • 2016-07-01
        • 2021-08-09
        • 1970-01-01
        相关资源
        最近更新 更多