Обеспечить доставку сообщения, RabbitMq
Я знаю, что общий подход состоит в том, чтобы создать очередь потребителей перед публикацией сообщения, но здесь, кажется, происходит довольно тесная связь, обычно я не хочу знать, сколько очередей потребляет этот обмен и сколько сообщений получает каждая из них, как можно мы сохраняем надежность, отделяя сервер от потребителя?
На этом образе клиентское приложение все еще должно знать, есть ли какие-либо очереди сервера, доступные для обработки запроса на аутентификацию. Потому что, если нет очередей, сообщение будет буквально переписано, я не верю, что никто никогда не думал об этом? Или мы предполагаем, что такие очереди всегда существуют (они долговечны)?
2 ответа
Принцип работы RabbitMQ и AMQP 0.9.1 в целом заключается в том, чтобы не связывать отправителя сообщения с потребителем. Вы можете запросить обмен, используя множество различных методов, чтобы выяснить, какие очереди связаны с ним, но во время отправки сообщения вы никогда не будете уверены, что именно доступно, если вы на самом деле не создадите очередь и привязку самостоятельно.
Один из способов убедиться, что сообщение не было помещено в очередь, - использовать подтверждение издателя. Другой возможный асинхронный способ также заключается в прослушивании уведомления на стандартном обмене журналами RabbitMQ о том, что ваше сообщение было DLQ.
Вы можете использовать пул очередей, чтобы гарантировать надежную доставку сообщений. В этом случае клиентское приложение не должно явно знать о доступных очередях - оно просто запрашивает QueuePool
для следующей доступной очереди. Если QueuePool
из-за истощения QueuePool будет возвращать очередь способом, определенным клиентом через функцию высокого порядка. Больше информации здесь.