В чем разница между непосредственными и обязательными флагами в amqp/rabbitmq?

Я имею в виду документацию rabbitmq AMQP-0.9 для метода basic_publish. Он ссылается на два флага для сообщения:- 1) Немедленный, 2) Обязательный.

обязательный

Этот флаг сообщает серверу, как реагировать, если сообщение не может быть перенаправлено в очередь. Если этот флаг установлен, сервер вернет необратимое сообщение с методом Return. Если этот флаг равен нулю, сервер молча отбрасывает сообщение.

Сервер ДОЛЖЕН реализовать обязательный флаг.

Для немедленного: -

немедленный

Этот флаг сообщает серверу, как реагировать, если сообщение не может быть сразу направлено потребителю очереди. Если этот флаг установлен, сервер вернет недоставленное сообщение с методом Return. Если этот флаг равен нулю, сервер поставит сообщение в очередь, но без гарантии, что оно когда-либо будет использовано.

The server SHOULD implement the immediate flag.

В чем разница между обоими флагами, так как оба выглядят одинаково? Кроме того, в чем разница между недоставленным и непроверенным сообщением с точки зрения сервера rabbitmq?

1 ответ

Решение

На основании выписок из документации вы предоставили:

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

немедленно: здесь еще один шаг, издатель уведомляется, если для сообщения нет доступного потребителя.

Поэтому, если, например, вы отправляете сообщение в обмен, который может направить его в очередь, но в данный момент в очереди нет получателя:

  • с обязательной точки зрения все в порядке (ваше сообщение было перенаправлено в очередь. оно не "потеряно"
  • с непосредственной точки зрения это не нормально, потому что на момент публикации сообщения для этого пользователя не было.
Другие вопросы по тегам