Comment éviter réordonnancement des messages en utilisant PriorityExecutorBasedEventDrivenDispatcher?

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

Question

Mon acteur Akka a EFM la nécessité de hiérarchiser les messages dépendant du type. Pour être précis, l'acteur reçoit des messages dans l'une de ces catégories, par ordre de priorité:

  1. Les messages déclencheurs transitions d'état
  2. Messages qui interrogent l'état actuel
  3. Messages qui provoque l'acteur d'effectuer un travail ( "WorkMsg")

Selon les docs Akka, les messages peuvent être hiérarchisés en fonction de la liste ci-dessus avec un PriorityExecutorBasedEventDrivenDispatcher contenant un PriorityGenerator. Je l'ai mis en œuvre l'acteur EFM avec ce répartiteur et il fonctionne bien.

Le problème est que ce répartiteur aussi réassorts WorkMsgs, ce qui est pas ce que je veux.

WorkMsgs contiennent un horodatage et sont envoyés à l'acteur EFM trié par cet horodatage. Lorsque l'acteur EFM traite WorkMsgs, il défausse WorkMsgs qui sont plus âgés que la WorkMsg précédente. Donc, si ceux-ci sont réorganisés, je perds des données.

Sans PriorityExecutorBasedEventDrivenDispatcher, WorkMsgs ne sont pas réorganisés, mais les priorités dans la liste ci-dessus ne sont pas satisfaits.

Comment puis-je maintenir les priorités dans la liste ci-dessus, tout en empêchant réordonnancement des messages de la même priorité?

Était-ce utile?

La solution

priorisation acteur proxy peut donner la priorité des messages à envoyer à votre acteur de travailleur. Vous devrez trier et stocker les messages entrants ainsi que de mettre en œuvre la logique de hiérarchisation des priorités. Le travailleur devra en outre de répondre à la procuration après chaque message à faire savoir qu'il est prêt pour plus de travail.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top