2012-05-18 4 views
4

나는 임시 배우를 몇 가지 일을 위해 산란 해왔다. 부모 배우는 배우가 작업 완료 (성공 또는 실패)를보고 할 때 액터 정보를 간단한 맵에 저장하고있다. 나는지도를 정리하고있다. 괜찮습니다 ...죽은 배우의 메시지 뒤에 Terminated가 도착 했습니까?

작업이 끝나면 자식 액터가 부모에게보고 한 다음 poisonPill을 사용하여 자체를 죽입니다. 보고가 아닌 아이 때문에지도가 고아를 포함하지 않도록하기 위해 나는 또한 그들에 대한 사망 감시가 있습니다 ...

나에게 그것은 죽음의 시계가 별도의 서비스 인 것처럼 들리므로 메시지에는 같은 배우로부터 주문하는 메시지를 존중하는 이유.

아동이 부모 배우에게 보낸 메시지가 종료되기 전에 도착할 것이라는 보증이 있습니까?

답변

4

액터가 수행하는 마지막 작업은 postStop() 라이프 사이클 후크를 실행하는 것입니다. 반환 된 후에는 메시지 자체를 보낼 수 없습니다. 시스템 종료 통지 (관리자의 전략에 의해 보여지는 바와 같이 handleChildTerminated(...))와 Terminated DeathWatch 메시지는 나중에 발송됩니다. 즉, 마지막 메시지를 보낸 후 발생합니다. 따라서 메시지가 postStop()에서 다른 액터 A로 전송되고 액터 A가 Terminated 메시지 수신을 위해 등록되면 해당 메시지는 올바른 순서 (동일한 발신자, 동일한 수신자 => 순서)로 수신됩니다.

+0

necropost 죄송합니다 : 주문을 보장하기 위해 postStop hander에서 메시지를 보내야합니까, 아니면 postStop을 실행하기 전에 보낼 수 있습니까? – moatra

+0

물론 모든 정상적인 동작 호출은 postStop 훅 이전에 발생하며 해당 순서 보증이 적용됩니다. –