2010-08-06 18 views
0

Я Создано RabbitMQ Producer и RabbitMQ Потребитель ....RabbitMQ Обмен сообщения

предположит, мой производитель производит 10 сообщений. Как я могу получить конкретное сообщение из этих 10 сообщений.

Я хочу знать, как я могу однозначно идентифицировать сообщение и прочитать это или использовать это сообщение.

+0

Это реальный вопрос, Он хочет знать, как фильтровать сообщения. –

+0

Вы используете JMS или используете AMQP? –

+0

Я использую AMQP .. –

ответ

0

Существует несколько способов сделать это, но тот, который я использую больше всего, - это использовать ключ маршрутизации, уникальный для типа сообщения. Затем потребители привязываются к этому обмену с помощью определенного ключа маршрутизации, который заставляет сообщения отправлять только этим потребителям.

Если вы можете избежать этого, вы никогда не должны просто отправлять сообщения в одну очередь и разрешать пользователям сортировать их. Клавиши маршрутизации и обмены - это мощные инструменты, специально предназначенные для маршрутизации сообщений. Вы должны использовать это.

+0

Brisbin благодарит за ответ. Ну, я уже знаю, что вы говорите. Но у меня есть это странное требование. Это то, что я пытаюсь сделать: когда производитель публикует сообщение (предположим, что он уже опубликовал 5 сообщений), мы должны сообщить издателю, что его каждое сообщение может быть идентифицировано однозначно. И когда издатель запрашивает конкретное сообщение, которое он опубликовал через уникальный идентификатор, который мы ему предоставили ... сообщение должно быть показано ему, чтобы, если он захочет, он может отредактировать его и опубликовать новое сообщение. –

+0

Сначала мы связываем ключ обмена, очереди и маршрутизации например: ch.QueueBind («queue», «exch», «key2», false, null); Когда вы публикуете сообщение, вы указываете обмен, ключ маршрутизации, basicproperties, messagebody .. , например: ch.BasicPublish («exchange», «key2», null, messagebody1); И пока вы потребляете сообщение, вы указываете только имя очереди. например: BasicGetResult result = ch.BasicGet ("queue", noAck); Теперь оператор выше будет потреблять все сообщение в очереди. Моя проблема в том, что если я хочу потреблять определенное сообщение из очереди на основе ключа маршрутизации. –

0

У меня есть пример, который показывает, как сделать очередь темы в C#, который, как представляется, будет то, что ищу RabbitMQ Tutorial у меня есть тот, который показывает, как использовать EventingBasicConsumer, чтобы избежать блокировок при получении сообщения RabbitMQ EventingBasicConsumer

Смежные вопросы