RabbitMQ - récupération sélective des messages d'une file d'attente

je suis nouveau à RabbitMQ et je me demandais comment aborder ce problème. Je veux créer un service qui s'abonne à une file d'attente et ne tire que des messages qui répondent à des critères spécifiques; par exemple, si un en-tête de sujet spécifique est dans le message.

J'en apprends encore sur RabbitMQ, et je cherchais des conseils sur la façon d'aborder cela. Mes questions sont les suivantes: comment le consommateur peut-il tirer seulement des messages spécifiques de la file d'attente? Comment le producteur pourra définir un objet l'en-tête du message (si c'est le bon terme?)

11
demandé sur larryq 2012-06-21 19:58:01

1 réponses

RabbitMQ est parfait pour cette situation. Vous avez un certain nombre d'options pour faire ce que vous voulez. Je suggère de lire la documentation pour mieux la comprendre. Je vous suggère d'utiliser un sujet ou un échange direct. Le sujet est plus souple. Il va comme ceci.

Code du producteur se connecte au courtier RabbitMQ et crée et échange avec un nom spécifique.

le producteur publie pour échanger. Chaque message publié sera publié avec une clé de routage.

le consommateur se connecte au courtier RabbitMQ.

Consommateur crée la File d'attente

le consommateur lie la file D'attente à la bourse, la même bourse définie dans le producteur. La reliure inclut également les clés de routage pour chaque message requis pour ce consommateur particulier.

disons que vous publiiez des messages de journal. La clé de routage pourrait être quelque chose comme "log.info", " log.avertir", "journal.erreur." Chaque message publié par le producteur aura pertinentes clé de routage attachée. Vous disposerez alors d'un consommateur qui envoie et e-mail pour tous les messages d'erreur et un autre qui écrit tous les messages d'erreur dans un fichier. Ainsi, l'émaileur définira la liaison de sa file d'attente à l'échange avec la clé de routage "log.erreur." De cette façon, bien que l'échange reçoive tous les messages, la file d'attente définie pour l'émaileur ne contiendra que les messages d'erreur. Le filelogger définira une nouvelle file d'attente séparée liée au même échange et mettra en place une clé de routage. Vous pouvez faire trois reliures distinctes pour les trois clés de routage différentes require ou utiliser simplement le Joker "log.*" à la demande de tous les messages à partir de l'échange en commençant par le journal.

C'est un exemple simple qui montre comment vous pouvez obtenir ce que vous voulez faire.

ici pour des exemples de code spécifiquement nombre tutoriel numéro 5.

20
répondu robthewolf 2012-06-21 16:41:45