2010-12-13 2 views
0

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

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

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

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

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

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

ответ

1

Ваша AMQP клиентская библиотека должна обеспечивать синхронные сообщения, ожидая соответствующего ответного сообщения после отправки синхронизации. сообщение. Одно из исключений заключается в том, чтобы использовать поле «нет ожидания» и установить значение в true, определенные методы позволяют это, и в этом случае клиентская библиотека не должна ждать ответа, так как флаг «нет ожидания» эффективно говорит «дон», t отправьте мне ответное сообщение ».

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

+0

0 принять участие \t Я использую txamqp. Прямо сейчас у меня есть собственная исправленная вилка, которая просто возвращает ответ, если она не является ожидаемым ответом на асинхронный вызов. –

Смежные вопросы