Comment puis-je vérifier si une file D'attente de messages RabbitMQ existe ou non?

Comment puis-je vérifier si une file d'attente de messages existe déjà ou non?

J'ai 2 applications différentes, créant une file d'attente et l'autre lecture de cette file d'attente.

Donc, si j'exécute le Client qui lit d'abord à partir de la file d'attente, il se bloque.
Donc pour éviter que je voudrais d'abord vérifier si la file d'attente existe ou pas.

Voici l'extrait de code de la façon dont je lis la file d'attente:

QueueingBasicConsumer <ConsumerName> = new QueueingBasicConsumer(<ChannelName>); 
<ChannelName>.BasicConsume("<queuename>", null, <ConsumerName>); 
BasicDeliverEventArgs e = (BasicDeliverEventArgs)<ConsumerName>.Queue.Dequeue();
22
demandé sur Sᴀᴍ Onᴇᴌᴀ 2010-08-11 14:15:20

4 réponses

Ne vous embêtez pas à vérifier.

File d'attente.declare est une opération idempotente. Donc, si vous exécutez une fois, deux fois, N fois, le résultat sera toujours le même.

Si vous voulez vous assurer que la file d'attente existe, déclarez-La simplement avant de l'utiliser. Assurez-vous de le déclarer avec la même durabilité, exclusivité, suppression automatique à chaque fois, sinon vous obtiendrez une exception.

Si vous avez réellement besoin de vérifier si une file d'attente existe (vous ne devriez pas normalement avoir besoin de), Faites un passif déclarer de la file d'attente. Cette opération réussit si la file d'attente existe, ou échoue dans une erreur si ce n'est pas le cas.

43
répondu scvalex 2010-08-11 10:53:00

Cela ne fonctionnera pas dans les situations où il y a quelqu'un d'Autre (Autre application) responsable de la déclaration q. Et je ne pouvais tout simplement pas connaître tous les paramètres du q, juste le nom.

Je préfère utiliser passiveDeclare et vérifier L'Exception IOException que le q n'existe pas

1
répondu Wertikal 2014-03-24 09:12:47

Actuellement, vous pouvez connaître cette information et bien plus encore via RabbitMQ Management HTTP API.

Par exemple, Pour savoir si une file d'attente jusqu'à ce moment, vous pouvez appeler pour OBTENIR /api/files/vhost/nom interface de l'API.

0
répondu Dani 2015-01-01 18:24:30

Utilisez QueueDeclare () pour effectuer ceci comme suggéré. De plus, ce que nous avons toujours fait, c'est de faire en sorte que le consommateur de la file d'attente soit le propriétaire de la file d'attente, et de toujours publier sur des échanges créés et détenus par des éditeurs. Les consommateurs lient ensuite leurs files d'attente aux échanges dont ils souhaitent recevoir le trafic et utilisent un filtre de clé d'itinéraire approprié pour le trafic qu'ils souhaitent. De cette façon, les éditeurs sont mis en sourdine par aucun consommateur pour les files d'attente non durables, et les consommateurs sont libres d'aller et venir avec des files d'attente durables ou non durables mappées avec les clés d'itinéraire appropriées.

Il en résulte un système facilement administré et permet à l'administration web d'être utilisée pour créer une file d'attente durable et la lier à un échange, obtenir du trafic, le dissocier, Puis inspecter le contenu de la file d'attente pour comprendre le trafic et la charge qui transitent par l'échange.

0
répondu Grwww 2017-08-23 15:41:50