2009-07-16 11 views
3

J'ai un système qui va générer des messages sporadiquement, et je voudrais soumettre seulement zéro ou un message toutes les 5 minutes. Si aucun message n'est généré, rien ne sera traité par le consommateur de la file d'attente. Si une centaine de messages identiques sont générés dans les 5 minutes, je veux seulement que l'un de ceux-ci soit consommé dans la file d'attente. J'utilise AMQP (RabbitMQ), existe-t-il un moyen d'accomplir cela dans le protocole rabbitmq ou le protocole AMQP? Puis-je inspecter le contenu d'une file pour m'assurer que je n'insère pas de doublon? Il semble que l'inspection des files d'attente soit une mauvaise idée et ne soit généralement pas ce qui devrait être fait pour un système de messagerie.AMQP Retarder la livraison et empêcher les messages en double

Sans contrôle de file d'attente, est-ce possible avec ces outils? La seule solution qui vient à l'esprit est d'avoir une deuxième file d'attente qui prend tous les messages, puis le consommateur lit chaque message et le place dans une file d'attente interne, attend 5 minutes, et tous les messages dupliqués sont supprimés. Après le délai, le message unique est placé sur la "vraie" file d'attente à traiter.

Il semble que cela puisse être une situation courante qu'un système de file d'attente pourrait gérer. Des idées?

Répondre

2

La gestion de l'état des messages n'est pas une question traitée par AMQP. Vous pouvez essayer de gérer l'état dans un processus qui est également présent sur les messages AMQ et proxy (comme vous l'avez écrit dans votre question initiale). Selon votre situation, vous pourriez peut-être utiliser des séquences ou des moyens plus sophistiqués de détection de doublons sans état, mais AMQP ne gère pas ce cas d'utilisation spécifique. La seule chose qui est garantie est que si plusieurs liaisons correspondent à un message qui est ensuite remis à une file d'attente, seul un message est réellement délivré.

Questions connexes