Come impedire il riordino dei messaggi utilizzando PriorityExecutorBasedEventDrivenDispatcher?

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

Domanda

Il mio attore Akka FSM ha la necessità di dare la priorità ai messaggi in base al tipo. Per essere precisi, l'attore riceve i messaggi in una di queste categorie, in ordine di priorità:

  1. Messaggi che attivano le transizioni di stato
  2. Messaggi che interrogano lo stato corrente
  3. Messaggi che inducono l'attore a eseguire alcune operazioni ("WorkMsg")

Secondo i documenti di Akka, è possibile assegnare la priorità ai messaggi in base all'elenco sopra con un PriorityExecutorBasedEventDrivenDispatcher contenente un PriorityGenerator. Ho implementato l'attore FSM con questo dispatcher e funziona bene.

Il problema è che questo dispatcher riordina WorkMsgs, che non è quello che voglio.

I WorkMsgs contengono un timestamp e vengono inviati all'attore FSM ordinati in base a questo timestamp. Quando l'attore FSM elabora WorkMsgs, scarta WorkMsgs che sono più vecchi del precedente WorkMsg. Quindi, se questi vengono riordinati, perdo i dati.

Senza PriorityExecutorBasedEventDrivenDispatcher, WorkMsgs non viene riordinato, ma le priorità nell'elenco precedente non sono soddisfatte.

Come posso mantenere le priorità nell'elenco sopra, impedendo al contempo il riordino di messaggi con la stessa priorità?

È stato utile?

Soluzione

Un attore proxy che assegna la priorità può dare la priorità ai messaggi da inviare al tuo attore lavoratore.Dovrai ordinare e memorizzare i messaggi in arrivo, nonché implementare la logica di prioritizzazione.Il lavoratore dovrà inoltre rispondere al proxy dopo ogni messaggio per comunicargli che è pronto per ulteriori lavori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top