Обеспечить доставку сообщения, RabbitMq

Я знаю, что общий подход состоит в том, чтобы создать очередь потребителей перед публикацией сообщения, но здесь, кажется, происходит довольно тесная связь, обычно я не хочу знать, сколько очередей потребляет этот обмен и сколько сообщений получает каждая из них, как можно мы сохраняем надежность, отделяя сервер от потребителя?

введите описание изображения здесь

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

2 ответа

Принцип работы RabbitMQ и AMQP 0.9.1 в целом заключается в том, чтобы не связывать отправителя сообщения с потребителем. Вы можете запросить обмен, используя множество различных методов, чтобы выяснить, какие очереди связаны с ним, но во время отправки сообщения вы никогда не будете уверены, что именно доступно, если вы на самом деле не создадите очередь и привязку самостоятельно.

Один из способов убедиться, что сообщение не было помещено в очередь, - использовать подтверждение издателя. Другой возможный асинхронный способ также заключается в прослушивании уведомления на стандартном обмене журналами RabbitMQ о том, что ваше сообщение было DLQ.

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

Другие вопросы по тегам