2013-03-20 3 views
1

У меня есть несколько клиентов, которые подключены к обмену через autodelete:yes. Все это издатели и потребители. Но в принципе, теперь давайте предположим, что они публикуют сообщения. Поскольку у каждого клиента есть уникальный ключ привязки, я могу делать явные вещи в каждом сообщении на машине, которая потребляет эти машины. Все работает нормально.Уведомлять пользователя, когда очередь удалена на rabbitmq

Теперь, если клиенты разбились или я завершаю его вручную (через SIGINT, ctrl + c), то очередь будет удалена. Есть ли какой-либо способ, который я могу notifiy потребителей на удаленных машинах, что очередь удалена?

Я собираюсь создать обработчик сигналов в своем клиентском приложении, поэтому всякий раз, когда я улавлю SIGINT или SIGTERM, я сообщу об удаленном пользователе (я отправлю им сообщение о том, что очередь с уникальным id будет удален)

Есть ли другие способы сделать это, или мой путь - правильный способ сделать это?

+0

Не могли бы вы прояснить ситуацию? Когда очередь удаляется, потребитель удаляется вместе с ней (и сопутствующий канал закрывается). Поэтому потребители не должны уведомлять об этом. – theMayer

+0

Я уточню содержание. В основном с потребителями я имел в виду удаленную машину, которая потребляет от обмена, который публикуют мои клиенты. –

+0

Используете ли вы обмен Fanout или Topic? Я думаю, вы можете представить диаграмму, показывающую вашу топологию, потому что не очень понятно, кто публикует, где и кто потребляет оттуда. – theMayer

ответ

1

Как правило, для обмена сообщениями потребляющие приложения не заботятся о статусе создания приложений.

В RabbitMQ приложениям может быть известно о статусе потребляющего приложения посредством одного из двух механизмов. Первый (и предпочтительный) метод - через Dead-Letter Exchange (dlx). Когда ваше сообщение не может быть доставлено (поскольку очередь назначения не существует), он маршрутизируется здесь, и ваше приложение может отключать очереди сообщений, настроенные в DLX, чтобы выяснить, не попали ли они в пункт назначения ,

Второй способ - установить флаг Mandatory в сообщении. Это заставит брокера отправить сообщение прямо в производящее приложение с помощью метода Basic.Return в случаях, когда очередь назначения больше не существует.

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

+0

Сообщение Immediate имеет смысл. Спасибо, что заметили это. Я попробую и прокомментирую мои результаты. –

+0

Неплохо, я хотел написать Mandatory. – theMayer

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