2014-05-12 2 views
3

akka에서 액터가 정지되면 poststop 메서드가 호출됩니다.Akka에서 사후 정지와 종료 사이의 차이점은 무엇입니까?

시계도 감독자가 에 구성되어 배우가 종료 될 때 감독자 내에서 종료 된 메시지를받을 수 있습니다.

Terminated 대신 postStop을 사용하면 어떤 이점이 있습니까? 내가 볼 수있는 유일한 차이점은 입니다. 액터가 종료되면 postStop이 (액터 내에서) 호출되고 액터가 종료되면 (관리자 내에서) Terminated가 호출된다는 점만 다릅니다.

배우가 중지되었을 때 종료되지 않습니까? Terminated 메시지가 배우가 정말 그냥 다시 시작하지 않을 경우, 정지 된 경우에만 부모에게 전송되는 동안 모든

답변

7

먼저, postStop()는, 같은 배우 (here 참조) preRestart() 기본 구현에서 호출됩니다. 따라서 기본 설정에서 postStop()Terminated 메시지가 전송 된 횟수보다 많이 호출 될 수 있습니다.

그러나 주요 아이디어는 post*pre* 후크 정리에 배우의 자신의 상태를 필요로한다는 것입니다, 그리고 Terminated 메시지 (사실 전체 감시 시스템은) 여러 배우의 행동과 상태를 조정하기위한 것입니다. 그들의 목적은 다르며 postStop() 후크에서 사용자 정의 Terminated과 같은 메시지를 보낼 수 있지만 실제로는 안됩니다.

+0

http://doc.akka.io/api/akka/2.3.0/index.html#akka.actor.Actor postStop에 따르면 "actor.stop()"이 호출 된 후 비동기 적으로 호출됩니다. 이행." 그래서 이것은 postStop이 명시 적 actor.stop이 호출 된 후에 호출되고 일단 멈 추면 종료됩니다. –

+0

@ blue-sky, yes,'postStop()'은 액터가 정지 된 후에 호출됩니다. 그리고 "중지됨"과 "종료 됨"은 같은 것입니다. –

3

postStop은 액터 자체의 콜백입니다. 배우의 내부 상태를 정리하거나 상태를 기반으로 한 추가 메시지를 발생시키는 데 사용합니다.

Terminated을 보면서 다른 배우가 사망 한 경우 외부 배우에게 알릴 수 있습니다. 그것은 종료 된 배우 자체에 의존하지 않습니다.

관련 문제