#events #rabbitmq #message
#Мероприятия #rabbitmq #Сообщение
Вопрос:
Есть ли какой-либо способ узнать, когда потребитель отключается от очереди или когда очередь удаляется?
Требование заключается в следующем:
Я создаю систему, в которой несколько клиентов могут подписаться на определенные события из системы. Все клиенты создают свою собственную очередь и регистрируются в системе, используя какую-либо аутентификацию. Система по мере создания событий фильтрует события и пересылает их клиентам, которые имеют на них право.
Я реализовал POC для большей части этого, и он работает хорошо. Проблема, которую я не могу исправить, заключается в том, что, если клиент просто отключается от очереди (из-за завершения программы или около того), регистрация все еще существует, и система продолжает пытаться отправлять сообщения этому клиенту.
Поэтому мы хотели бы получать уведомления, когда клиент отключается или удаляется очередь, чтобы мы могли удалить регистрационные данные этого клиента и больше не отправлять ему сообщения.
Ответ №1:
Пусть ваш издатель использует подтверждения (он же Подтверждения издателя) и делает клиентскую очередь эксклюзивной и временной, поэтому только один клиент одновременно будет потреблять из одной очереди, и после его отключения он будет удален.
Если вы публикуете сообщение, которое перенаправляется только в одну очередь, и эта очередь исчезла (предположим, вы используете подтверждение издателя и публикуете сообщение с mandatory
установленным флагом), издатель будет уведомлен о том, что сообщение не может быть перенаправлено с возвратом этого сообщения обратно, поэтому вы можете прекратить публикацию сообщений.
Подробнее см. Раздел «Как подтверждается работа» в сообщении в блоге RabbitMQ «Введение в подтверждение издателя» и официальные документы подтверждения (также известные как подтверждения издателя).
Комментарии:
1. это отличная идея. Также я нашел этот плагин: rabbitmq_event_exchange. Каковы ваши идеи относительно использования этого плагина сообщества?
2. Я никогда не использовал его в производстве, но если они говорят, что это работает, почему бы просто не попробовать?
3. Я только что реализовал его в POC, и, похоже, он работает просто отлично. Очень полезно.