Недавно я столкнулся с проблемой в одной из популярных библиотек, реализующих клиентский протокол 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