2014-10-07 3 views
7

이벤트가 버스에 입장 한 순서를 유지하고 싶습니다. 예를 들어 event1이면 event2로, 버스에 입장하면 가입 한 액터가 순서대로 이벤트를 가져옵니다.Akka의 이벤트 버스가 메시지 순서를 보장합니까?

이러한 순서가 클러스터 된 노드와 단일 노드 액터 시스템에서 모두 보장되는지 의문입니다.

+0

단일 스레드에서 추가한다고 가정합니다. 그렇지 않으면 모든 청취자가 동일한 순서로 표시된다는 것입니다. –

+0

@dds이 섹션은 배우들과의 의사 소통을 말하는 것이지만, 나는 이벤트 버스를 궁금해합니다. –

+1

@PeterLawrey 예, 단일 스레드 게시자 –

답변

3

액터 시스템에서 이벤트 스트림을 사용하는 경우 (system.eventStream) 단일 스레드가 게시되고 있음을 보증 할 수있는 경우 순서가 유지됩니다. 이벤트 버스 (system.eventStream에 묶인 종류)의 서브 채널 분류 맛은 정말 간단합니다. 가입 액터 목록에는 기본적으로 클래스 유형의 Map이 있습니다. 이벤트가 게시되면 Map (있는 경우)에서 일치하는 구독자 목록을 가져온 다음 각자에게 메시지를 보냅니다. 따라서 하나의 스레드 만 publish을 호출하는 경우 event2로 이동하기 전에 event1을 게시하여 모든 구독자의 사서함에 전달해야합니다. 액터는 메시지가 수신 된 순서대로 사서함을 처리합니다 (사용자 지정 PriorityMailbox 지정을 사용하지 않는 한).

물론 여러 개의 스레드가있는 경우 스레드 1이 먼저 게시를 시작할 수 있지만 스레드 2는 먼저 순서가 잘못되어 있다고 생각할 수 있으므로 완료 처리 할 수 ​​없습니다.