Событие отключения потребителя RabbitMQ

#events #rabbitmq #message

#Мероприятия #rabbitmq #Сообщение

Вопрос:

Есть ли какой-либо способ узнать, когда потребитель отключается от очереди или когда очередь удаляется?

Требование заключается в следующем:

Я создаю систему, в которой несколько клиентов могут подписаться на определенные события из системы. Все клиенты создают свою собственную очередь и регистрируются в системе, используя какую-либо аутентификацию. Система по мере создания событий фильтрует события и пересылает их клиентам, которые имеют на них право.

Я реализовал POC для большей части этого, и он работает хорошо. Проблема, которую я не могу исправить, заключается в том, что, если клиент просто отключается от очереди (из-за завершения программы или около того), регистрация все еще существует, и система продолжает пытаться отправлять сообщения этому клиенту.

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

Ответ №1:

Пусть ваш издатель использует подтверждения (он же Подтверждения издателя) и делает клиентскую очередь эксклюзивной и временной, поэтому только один клиент одновременно будет потреблять из одной очереди, и после его отключения он будет удален.

Если вы публикуете сообщение, которое перенаправляется только в одну очередь, и эта очередь исчезла (предположим, вы используете подтверждение издателя и публикуете сообщение с mandatory установленным флагом), издатель будет уведомлен о том, что сообщение не может быть перенаправлено с возвратом этого сообщения обратно, поэтому вы можете прекратить публикацию сообщений.

Подробнее см. Раздел «Как подтверждается работа» в сообщении в блоге RabbitMQ «Введение в подтверждение издателя» и официальные документы подтверждения (также известные как подтверждения издателя).

Комментарии:

1. это отличная идея. Также я нашел этот плагин: rabbitmq_event_exchange. Каковы ваши идеи относительно использования этого плагина сообщества?

2. Я никогда не использовал его в производстве, но если они говорят, что это работает, почему бы просто не попробовать?

3. Я только что реализовал его в POC, и, похоже, он работает просто отлично. Очень полезно.