В чем разница между непосредственными и обязательными флагами в amqp/rabbitmq?
Я имею в виду документацию rabbitmq AMQP-0.9 для метода basic_publish. Он ссылается на два флага для сообщения:- 1) Немедленный, 2) Обязательный.
обязательный
Этот флаг сообщает серверу, как реагировать, если сообщение не может быть перенаправлено в очередь. Если этот флаг установлен, сервер вернет необратимое сообщение с методом Return. Если этот флаг равен нулю, сервер молча отбрасывает сообщение.
Сервер ДОЛЖЕН реализовать обязательный флаг.
Для немедленного: -
немедленный
Этот флаг сообщает серверу, как реагировать, если сообщение не может быть сразу направлено потребителю очереди. Если этот флаг установлен, сервер вернет недоставленное сообщение с методом Return. Если этот флаг равен нулю, сервер поставит сообщение в очередь, но без гарантии, что оно когда-либо будет использовано.
The server SHOULD implement the immediate flag.
В чем разница между обоими флагами, так как оба выглядят одинаково? Кроме того, в чем разница между недоставленным и непроверенным сообщением с точки зрения сервера rabbitmq?
1 ответ
На основании выписок из документации вы предоставили:
обязательный: сообщение, отправленное на обмен без соответствующей привязки к месту назначения (в основном очередь, вам необходимо дополнительно проверить, что произойдет в случае привязок между обменом), будет возвращено издателю, поэтому издатель будет знать, что брокер не может направить сообщение
немедленно: здесь еще один шаг, издатель уведомляется, если для сообщения нет доступного потребителя.
Поэтому, если, например, вы отправляете сообщение в обмен, который может направить его в очередь, но в данный момент в очереди нет получателя:
- с обязательной точки зрения все в порядке (ваше сообщение было перенаправлено в очередь. оно не "потеряно"
- с непосредственной точки зрения это не нормально, потому что на момент публикации сообщения для этого пользователя не было.