¿Cómo evitar el reordenamiento de mensajes usando PriorityExecutorBasedEventDrivenDispatcher?

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

Pregunta

Mi actor Akka FSM tiene la necesidad de priorizar mensajes dependiendo del tipo. Para ser específico, el actor recibe mensajes en una de estas categorías, en orden de prioridad:

  1. Mensajes que desencadenan transiciones de estado
  2. Mensajes que consultan el estado actual
  3. Mensajes que hacen que el actor realice algún trabajo ("WorkMsg")

De acuerdo con los documentos de Akka, los mensajes se pueden priorizar de acuerdo con la lista anterior con un PriorityExecutorBasedEventDrivenDispatcher que contiene un PriorityGenerator. Implementé el actor FSM con este despachador y funciona bien.

El problema es que este despachador también reordena WorkMsgs, que no es lo que quiero.

WorkMsgs contienen una marca de tiempo y se envían al actor FSM ordenados por esta marca de tiempo. Cuando el actor de FSM procesa WorkMsg, descarta los WorkMsgs que son más antiguos que el WorkMsg anterior. Entonces, si se reordenan, pierdo datos.

Sin PriorityExecutorBasedEventDrivenDispatcher, los WorkMsgs no se reordenan, pero las prioridades de la lista anterior no se satisfacen.

¿Cómo puedo mantener las prioridades en la lista anterior y al mismo tiempo evitar el reordenamiento de los mensajes de la misma prioridad?

¿Fue útil?

Solución

Un actor proxy que prioriza puede priorizar los mensajes que se enviarán a su actor trabajador.Deberá ordenar y almacenar los mensajes entrantes, así como implementar la lógica de priorización.Además, el trabajador tendrá que responder al proxy después de cada mensaje para hacerle saber que está listo para trabajar más.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top