Comment éviter réordonnancement des messages en utilisant PriorityExecutorBasedEventDrivenDispatcher?
-
27-10-2019 - |
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é:
- Les messages déclencheurs transitions d'état
- Messages qui interrogent l'état actuel
- 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é?
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.