2017-04-25 122 views
0

我有兩個通過akka遠程通信的角色系統。來自RemoteDeadLetterActorRef的SelectChildName消息

當我看看JVM堆時,我看到(太)akka.dispatch.Envelope的許多實例包含來自akka.remote.RemoteActorRefProvider$RemoteDeadLetterActorRefSelectChildName消息。

這些消息的保留堆非常大,並導致內存問題。

這些SelectChildName消息的目的是什麼?有沒有辦法避免它們?

僅供參考這似乎與兩個參與者系統之間發生的分離錯誤有關。

感謝, 米凱爾

回答

1

SelectChildName消息由阿卡遠程處理解決遠程演員。如果您看到其中很多,則可能會直接與ActorSelection而不是ActorRef進行互動。

每次發送消息給一個ActorSelection,例如(這些是從docs截取)

val selection = context.actorSelection("akka.tcp://[email protected]:2552/user/actorName") 
selection ! "Pretty awesome feature" 

的 - 可能遠程 - 演員得到解決,並涉及由底層交換SelectChildName消息的阿卡基礎設施。

如果是這種情況,請嘗試直接使用ActorRef s。您可以使用resolveOne方法從ActorSelection中獲得一個。

引述docs再次:

它始終是優選使用 其ActorRef而不是依靠ActorSelection其他行動者進行通信。例外

  • 使用與遠程系統
對AT-最不一旦交貨設施
  • 發起第一接觸發送消息