2017-04-25 6 views
0

akka remoting을 통해 통신하는 두 개의 액터 시스템이 있습니다.RemoteDeadLetterActorRef의 SelectChildName 메시지

내가 JVM 힙을 살펴볼 때 akka.remote.RemoteActorRefProvider$RemoteDeadLetterActorRef의 메시지가 akka.dispatch.Envelope이고 메시지가 인 것을 볼 수 있습니다.

이 메시지의 보존 된 힙은 꽤 커서 메모리 문제가 발생합니다.

이러한 SelectChildName 메시지의 목적은 무엇입니까? 그들을 피할 수있는 방법이 있습니까?

참고 이것은 두 개의 액터 시스템간에 발생하는 Disassociation 오류와 관련이있는 것으로 보입니다.

감사합니다,

답변

1

SelectChildName 메시지 미하일 원격 배우를 해결하기 위해 Akka 원격으로 사용된다. 많은 정보가있는 경우 ActorRef 대신 ActorSelection과 직접 상호 작용할 가능성이 있습니다.

때마다 당신이 (이이 docs에서 발췌)

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

는 예를 들어, ActorSelection에게 메시지를 보내 - 아마도 원격 - 배우가 해결되고, 그 기본으로 SelectChildName 메시지의 교환을 포함한다 Akka 인프라.

그런 경우라면 직접 ActorRef을 사용해보십시오. 메서드를 사용하여 ActorSelection에서 하나를 얻을 수 있습니다.

docs 다시 인용 :

항상 자신의 ActorRef를 사용하는 대신 ActorSelection에 의존 다른 배우와 통신하는 것이 바람직하다. 예외가

  • 원격 시스템
로 배달 시설
  • 에서-최소 일단 시작하는 첫 접촉을 사용하여 메시지를 보내는