Правильное поведение клиента AMQP против синхронных сообщений - PullRequest
0 голосов
/ 13 декабря 2010

Недавно я столкнулся с проблемой в одной из популярных библиотек, реализующих клиентский протокол AMQP. Спецификация AMQP определяет синхронные и асинхронные сообщения. Проблема в том, что я отправил два синхронных запроса один за другим, не дожидаясь завершения первого, и сервер RabbitMQ ответил в обратном порядке. Библиотека ожидала, что ответы будут приходить в том же порядке, в котором были отправлены запросы. Это ошибка в библиотеке или мое неправильное использование?

Вопрос заключается в следующем: должен ли клиент AMQP самостоятельно позаботиться о сериализации синхронных вызовов?

Ниже приведены некоторые ссылки, которые я нашел связанными. В разделе 2.2.1 документа спецификации [1] сказано следующее:

Чтобы упростить обработку методов, мы определяем разные ответы для каждого синхронного запроса. То есть нет Метод используется в качестве ответа на два разных запроса. Это означает, что одноранговый, отправляющий синхронный запрос, может принимать и обрабатывать входящие методы до получения одного из действительных синхронных ответов. это отличает AMQP от более традиционных протоколов RPC.

Недоразумение в том, что автор имел в виду, что обработка входящих методов ограничена асинхронными вызовами (например, basic_deliver) или же включает в себя ответы на различные синхронные вызовы.

[1] http://www.amqp.org/confluence/download/attachments/720900/amqp0-9-1.pdf?version=1&modificationDate=1227526523000

1 Ответ

1 голос
/ 19 марта 2011

Ваша клиентская библиотека Amqp должна обеспечивать синхронные сообщения, ожидая соответствующего ответного сообщения после отправки синхронизации. сообщение. Единственным исключением здесь является использование поля «no-wait» и установка значения в true, определенные методы позволяют это, и в этом случае клиентская библиотека не должна ждать ответа, так как флаг no-wait эффективно говорит «don» Отправьте мне ответное сообщение ".

Кстати, какую клиентскую библиотеку вы используете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...