【问题标题】:SelectChildName messages from RemoteDeadLetterActorRef来自 RemoteDeadLetterActorRef 的 SelectChildName 消息
【发布时间】:2017-04-25 08:56:19
【问题描述】:

我有两个通过 akka 远程处理进行通信的参与者系统。

当我查看 JVM 堆时,我看到(太多)akka.dispatch.Envelope 的许多实例包含来自 akka.remote.RemoteActorRefProvider$RemoteDeadLetterActorRefSelectChildName 消息。

这些消息的保留堆非常大,会导致内存问题。

这些SelectChildName 消息的目的是什么?有没有办法避免它们?

仅供参考,这似乎与两个参与者系统之间发生的解除关联错误有关。

谢谢, 迈克尔

【问题讨论】:

    标签: akka akka-remoting


    【解决方案1】:

    SelectChildName 消息被 Akka Remoting 用于解析远程参与者。如果您看到其中很多,那么您有可能直接与ActorSelection 互动,而不是ActorRef

    例如,每次您向ActorSelection 发送消息时(这些来自docs

    val selection = context.actorSelection("akka.tcp://actorSystemName@10.0.0.1:2552/user/actorName")
    selection ! "Pretty awesome feature"
    

    解决了(可能是远程的)actor,这涉及到底层 Akka 基础设施交换 SelectChildName 消息。

    如果是这种情况,请尝试直接使用ActorRefs。您可以使用resolveOne 方法从ActorSelection 获取一个。

    再次引用docs

    始终最好使用以下方式与其他 Actor 进行通信 他们的 ActorRef 而不是依赖于 ActorSelection。例外是

    • 使用 At-Least-Once Delivery 工具发送消息
    • 开始与远程系统的首次联系

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      • 2012-05-30
      • 1970-01-01
      • 2020-07-28
      相关资源
      最近更新 更多