Я работал над проектом, в котором для общения используется rabbitmq. Недавно мы обнаружили, что было бы намного масштабируемо, если бы мы использовали функцию маршрутизации кролика. Таким образом, мы привязываем очередь к нескольким ключам маршрутизации и используем обмен с типом direct
.
Это работает как публикация / подписка. Таким образом, можно привязывать и отменять привязку очереди к различным событиям, чтобы потребители / подписчики получали только те сообщения, которые им интересны.
Конечно, производитель / издатель теперь использует ключ привязки (имя события) как routing_key
, чтобы передать его реализации pika. Однако, когда он публикует что-то для несуществующей привязки, сообщение теряется, т.е. когда никто не связывает очередь для события foo
, но какой-то издатель вызывает pika.basic_publish(..., routing_key='foo')
.
Итак, мой вопрос:
Можно ли узнать, действительно ли сообщение было опубликовано в очереди?
Что я пробовал:
Проверка возвращаемого значения pika.basic_publish. Всегда возвращает
None
.Проверяем, есть ли исключение, когда мы пытаемся опубликовать несуществующую привязку. Здесь ничего нет.
Наличие дополнительной очереди для внеполосного управления (поскольку все подписчики управляются одним и тем же процессом). Мне такой подход не кажется идеальным.
Дополнительная информация
Поскольку я использую эту функцию маршрутизации, имена очередей генерируются кроликом. У меня нет проблем, если новый подход должен называть саму очередь.
Если предлагается новый подход, требующий привязки к обменам вместо очередей, я хотел бы их услышать, но я бы предпочел избегать их, поскольку на самом деле они не AMQP и являются расширением, реализованным rabbitmq.
версия pika - 0.9.5
версия rabbitmq - 2.8
Большое спасибо