来自RemoteDeadLetterActorRef的SelectChildName消息

时间:2017-04-25 08:56:20

标签: akka akka-remoting

我有两个通过akka远程通信进行通信的actor系统。

当我查看JVM堆时,我也看到akka.dispatch.Envelope包含来自SelectChildName的{​​{1}}条消息的许多实例。

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

这些akka.remote.RemoteActorRefProvider$RemoteDeadLetterActorRef消息的目的是什么?有没有办法避免它们?

FYI这似乎与两个演员系统之间发生的Disassociation错误有关。

谢谢, 米凯尔

1 个答案:

答案 0 :(得分:1)

Akka Remoting使用

SelectChildName消息来解析远程actor。如果您看到很多内容,则可能会直接与ActorSelection进行互动,而不是ActorRef

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

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

- 可能是远程 - 演员被解决,这涉及到底层Akka基础设施交换SelectChildName消息。

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

再次引用docs

  

使用其他Actors进行通信总是比较好   他们的ActorRef而不是依赖于ActorSelection。例外是

     
      
  • 使用至少一次交付工具发送消息
  •   
  • 首次与远程系统联系
  •