2010-08-06 6 views
0

J'ai créé un producteur RabbitMQ et un consommateur RabbitMQ ....RabbitMQ échange de messages

Supposons que mon producteur produise 10 messages. Comment puis-je obtenir un message particulier de ces 10 messages.

Je veux savoir comment puis-je identifier un message de façon unique et le lire ou le consommer.

+0

Ceci est une vraie question, il veut savoir comment filtrer les messages. –

+0

Utilisez-vous JMS ou utilisez-vous AMQP? –

+0

J'utilise AMQP .. –

Répondre

0

Il y a plusieurs façons de le faire, mais celle que j'utilise le plus est d'utiliser une clé de routage qui est unique au type de message. Les consommateurs se lient ensuite à cet échange à l'aide d'une clé de routage spécifique, ce qui fait que les messages ne sont envoyés qu'aux consommateurs. Si vous pouvez l'éviter, vous ne devriez jamais simplement jeter les messages dans une seule file d'attente et laisser les consommateurs les trier. Les clés de routage et les échanges sont des outils puissants conçus spécifiquement pour le routage des messages. Vous devriez tirer parti de cela.

+0

Brisbin merci d'avoir répondu à la question. Eh bien, je suis déjà au courant de ce que vous dites. Mais j'ai cette exigence bizarre. C'est ce que j'essaie de faire: lorsqu'un producteur publie un message (supposons qu'il a déjà publié 5 messages), nous devons informer l'éditeur que chaque message peut être identifié de manière unique. Et lorsque l'éditeur demande un message particulier qu'il a publié à travers l'identifiant unique que nous lui avons fourni ... le message devrait lui être affiché afin que s'il le veut il puisse le modifier et publier un nouveau message. –

+0

Nous lions d'abord la clé d'échange, de file d'attente et de routage Par exemple: ch.QueueBind ("queue", "exch", "key2", false, null); Lorsque vous publiez un message, vous parlez d'échange, de clé de routage, de propriétés de base, de corps de message ... par exemple: ch.BasicPublish ("exch", "key2", null, messagebody1); Et pendant que vous consommez le message, vous ne mentionnez que le nom de la file d'attente. Par exemple: résultat BasicGetResult = ch.BasicGet ("queue", noAck); Maintenant, l'instruction ci-dessus va consommer tous les messages dans la file d'attente .. Mon problème est que si je veux consommer un message particulier de la file d'attente en fonction de la clé de routage. –

0

J'ai un exemple qui montre comment faire une file d'attente de sujet en C# qui semble être ce que vous cherchez RabbitMQ Tutorial J'ai aussi qui montre comment utiliser le EventingBasicConsumer pour éviter de bloquer lors de l'obtention des messages RabbitMQ EventingBasicConsumer

Questions connexes