Como evitar o reordenamento de mensagens usando PriorityExecutorBasedEventDrivenDispatcher?

StackOverflow https://stackoverflow.com/questions/8354958

Pergunta

Meu ator Akka FSM precisa priorizar as mensagens dependendo do tipo. Para ser mais específico, o ator recebe mensagens em uma dessas categorias, em ordem priorizada:

  1. Mensagens que acionam transições de estado
  2. Mensagens que consultam o estado atual
  3. Mensagens que fazem com que o ator execute algum trabalho ("WorkMsg")

De acordo com os documentos Akka, as mensagens podem ser priorizadas de acordo com a lista acima com um PriorityExecutorBasedEventDrivenDispatcher contendo um PriorityGenerator. Implementei o ator FSM com este dispatcher e ele funciona bem.

O problema é que este despachante também reordena WorkMsgs, que não é o que eu quero.

WorkMsgs contém um carimbo de data / hora e são enviados ao ator FSM classificados por esse carimbo de data / hora. Quando o ator FSM processa WorkMsgs, ele descarta WorkMsgs que são mais antigos do que o WorkMsg anterior. Portanto, se eles forem reordenados, eu perco dados.

Sem PriorityExecutorBasedEventDrivenDispatcher, WorkMsgs não são reordenados, mas as prioridades na lista acima não são satisfeitas.

Como posso manter as prioridades na lista acima, evitando reordenar mensagens com a mesma prioridade?

Foi útil?

Solução

Um ator de proxy priorizando pode priorizar mensagens a serem enviadas ao seu ator trabalhador.Você terá que classificar e armazenar as mensagens recebidas, bem como implementar a lógica de priorização.O trabalhador também terá que responder ao proxy após cada mensagem para informá-lo de que está pronto para mais trabalho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top