2011-12-02 4 views
1

내 Akka FSM 액터는 유형에 따라 메시지 우선 순위를 매길 필요가 있습니다.PriorityExecutorBasedEventDrivenDispatcher를 사용하여 메시지 재정렬을 방지하는 방법은 무엇입니까?

  1. 메시지 상태 전환에게 현재 상태를 배우가 몇 가지 작업을 수행하는 원인이
  2. 메시지를 조회
  3. 메시지를 트리거 : 구체적으로, 배우가 우선 순위 순서로, 이러한 범주 중 하나에 메시지를 수신 ("WorkMsg")는

Akka의 문서에 따르면, 메시지는 PriorityGenerator 함유 PriorityExecutorBasedEventDrivenDispatcher 위에서 목록에 따라 우선 순위가 될 수있다. 이 디스패처로 FSM 액터를 구현했으며 잘 작동합니다.

문제가되지 않습니다이 디스패처 재 배열 WorkMsgs, 내가 원하는 것입니다.

WorkMsg에는 타임 스탬프가 포함되어 있으며이 타임 스탬프로 정렬 된 FSM 액터로 전송됩니다. FSM 액터가 WorkMsg를 처리하면 이전 WorkMsg보다 오래된 WorkMsg가 삭제됩니다. 그래서 이것들이 재정렬된다면 나는 데이터를 잃어 버린다.

PriorityExecutorBasedEventDrivenDispatcher를 사용하지 않으면 WorkMsg가 재정렬되지 않지만 위의 목록에서 우선 순위가 충족되지 않습니다.

우선 순위가 동일한 메일의 순서가 변경되는 것을 방지하면서 위 목록의 우선 순위를 어떻게 유지할 수 있습니까?

답변

2

우선 순위 프록시 액터은 작업자에게 보낼 메시지의 우선 순위를 지정할 수 있습니다. 우선 순위 지정 로직을 구현할뿐만 아니라 들어오는 메시지를 정렬하고 저장해야합니다. 작업자는 추가 작업 준비가되었음을 알리기 위해 각 메시지가 끝나면 프록시에 응답해야합니다.

+0

팁 주셔서 감사합니다. 우선 순위 논리를 별도의 액터에 넣는 대신 Akkas PriorityGenerator를 기반으로 m 개의 MessageInvocation Comparator를 만들었습니다. – eirirlar