[scala] Akka Kill vs. Stop Pill 대 Poison Pill?

Akka의 초보자 질문-Akka Essentials를 읽고 있습니다. 누군가 Akka Stop / Poison Pill과 Kill의 차이점을 설명해 주시겠습니까? 이 책은 “킬은 동 기적이다. 독약은 비동기 적이다”라는 작은 설명을 제공한다. 그러나 어떤 방법으로? 이 시간 동안 호출 액터 스레드가 잠깁니까? 살인, 정지 후 등의 행동에 아동 배우자에게 통보 되는가? 하나의 개념과 다른 개념의 사용 예?

많은 감사합니다!



답변

모두 stopPoisonPill배우를 종료하고 메시지 큐를 중지합니다. 액터가 메시지 처리를 중단하고 모든 자식에게 중지 호출을 보내고 종료 될 때까지 기다린 다음 postStop후크 를 호출합니다 . 모든 추가 메시지는 배달 못한 편지함 사서함으로 전송됩니다.

이 순서가 시작되기 전에 메시지가 처리되는 차이점이 있습니다. stop통화 의 경우 , 현재 처리중인 메시지가 먼저 완료되고 다른 모든 메시지는 삭제됩니다. 를 보낼 때 PoisonPill이것은 대기열에있는 다른 메시지 일 뿐이므로를 받으면 시퀀스가 시작됩니다 PoisonPill. 큐에서 그보다 앞서있는 모든 메시지가 먼저 처리됩니다.

대조적으로, Kill메시지는 액터가 ActorKilledException일반 수퍼바이저 메커니즘을 사용하여 처리되는 것을 던지게합니다 . 따라서 여기에서의 동작은 관리자 전략에서 정의한 내용에 따라 다릅니다. 디폴트는 액터를 정지시키는 것입니다. 그러나 메일 함은 지속되므로 행위자가 다시 시작할 때 실패를 유발 한 메일을 제외하고는 이전 메일이 계속 남아 있습니다.

문서의 ‘액터 중지’, ‘액터 처치’섹션도 참조하십시오.

http://doc.akka.io/docs/akka/snapshot/scala/actors.html

그리고 감독 전략에 대한 추가 정보 :

http://doc.akka.io/docs/akka/snapshot/scala/fault-tolerance.html


답변

가능하면 PoisonPill을 사용하십시오. 사서함에 저장되며 다른 메시지와 같이 사용됩니다. 액터 내에서 “context.stop (self)”를 사용할 수도 있습니다.


답변

PoisonPill은 PoisonPill 이전에 사서함으로 수신 된 모든 메시지를 처리 ​​한 후에 행위자를 비동기 적으로 중지합니다.


답변

액터 스톱 및 포이즌 필을 사용하여 액터 처리를 중지하고 액터를 종료하여 액터를 완전히 종료 할 수 있습니다. x.stop은 akka receive 메소드에서 호출이며 postStop을 호출 한 후에 만 ​​액터 상태를 새 액터로 바꿉니다. x! PoisonPill은 액터가 실행 중일 때 처리를 중지하기 위해 액터에 전달하는 방법입니다 (권장). postStop을 호출 한 후 액터 상태를 대체합니다. x.kill은 액터를 종료하고 액터 경로에서 액터를 제거하고 전체 액터를 새 액터로 교체합니다.


답변