Pour un intergiciel orienté message qui ne prend pas en charge les messages prioritaires (tels que AMQP), quelle est la meilleure façon d'implémenter la consommation prioritaire lorsque les files d'attente n'ont qu'une sémantique FIFO ? Le cas d'utilisation général serait un système dans lequel les consommateurs recevraient des messages d'une priorité plus élevée avant les messages de priorité inférieure lorsqu'un grand nombre de messages en attente existe dans la file d'attente (s).Dans un système FIFO Qeueing, quelle est la meilleure façon d'implémenter la messagerie prioritaire?
Dans un système FIFO Qeueing, quelle est la meilleure façon d'implémenter la messagerie prioritaire?
Répondre
Étant donné que seul un FIFO prend en charge une seule file d'attente, vous devrez bien sûr introduire plusieurs files d'attente, un intermédiaire ou un consommateur plus complexe.
Plusieurs files d'attente peuvent être traitées de plusieurs manières. Le producteur et le consommateur pourraient accepter d'avoir deux files d'attente entre eux, une pour la haute priorité, et une pour les tâches de fond.
Si votre producteur est contraint à une file d'attente unique, mais que vous avez le contrôle sur le consommateur, envisagez d'introduire un routeur sortant dans le chemin. Donc, producteur-> Routeur est une file d'attente unique, et le routeur a alors deux files d'attente pour le consommateur.
Une autre façon de l'aborder, qui est probablement moins qu'idéale, serait d'avoir un fil conducteur pour faire avancer la file d'attente, puis répartir le travail en interne. Quelque chose comme la version du routeur ci-dessus, mais à l'intérieur d'une seule application. Cela a l'inconvénient d'avoir plusieurs messages en vol à l'intérieur de votre application, ce qui peut compliquer la récupération en cas de défaillance. N'oubliez pas de considérer la famine des événements de faible priorité, quels qu'ils soient, si certains d'entre eux doivent être traités même s'il y a des événements de priorité plus élevée.
C'est plus ou moins exactement à qui nous avons appliqué cette stratégie pour un projet en cours. Files d'attente multiples pour un système de priorité classé. Nous ne nous inquiétons pas beaucoup de la famine car nous pouvons simplement republier des messages importants de moindre priorité avec une priorité plus élevée dans de tels cas; Le travail redondant est géré, pour la plupart, de manière idempotente. – quaternion
Pouvez-vous avoir plusieurs files d'attente? Si c'est le cas, je suggère d'avoir une file d'attente séparée pour les messages de haute priorité qui est interrogée en premier avant la file d'attente standard, qui est seulement utilisée si la file d'attente de priorité est vide. Je ne sais pas si cela correspond à votre scénario, mais c'était ma première idée. – CodeFusionMobile
Je suis d'accord avec CSharpWithJava. Je fais une grande application de messagerie en ce moment, et je pense que de vos questions, vous avez besoin de plusieurs files d'attente, de sorte que vous pouvez décharger des messages pri inférieurs à une file d'attente pri inférieure et lire le pri immédiatement. –