RabbitMQ: Получение ответа Basic.ConsumeOk не в порядке - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь отправить несколько методов по одному каналу на сервер RabbitMQ в конвейере, а затем дождаться соответствующих синхронных ответов.Я наблюдаю за следующим артефактом:

Конвейер клиентских запросов:

Exchange.Declare -> Queue.Declare -> Queue.Bind -> Basic.Consume -> Basic.Qos

Ответ сервератрубопровод:

Exchange.DeclareOk -> Queue.DeclareOk -> Queue.BindOk -> Basic.QosOk -> Basic.ConsumeOk

Обратите внимание, что ответ Basic.ConsumeOk идет после Basic.QosOk, даже если порядок запросов в конвейере былразные.Читая спецификации, я пришел к выводу, что между синхронным запросом и соответствующим ответом могут быть получены только асинхронные методы (Basic.Deliver, Basic.Return, Channel.Flow,Connection.Close, Channel.Close).

В противном случае, если, например, я выдаю несколько Queue.Declare запросов или даже Basic.Consume запросов подряд, невозможно будет узнать, какой ответ соответствует каким запросам, еслипорядок не сохраняется.

Это считается нормальным?Мое понимание неверно?Или, может, конвейер не поддерживается RabbitMQ?

1 Ответ

1 голос
/ 26 марта 2019

Я предполагаю, что вы используете пользовательскую библиотеку или свой собственный код, потому что конвейерная обработка не поддерживается RabbitMQ или любой из клиентских библиотек, которые мы поддерживаем. Это легко увидеть, когда вы запускаете некоторый код с использованием официально поддерживаемой библиотеки.

Когда я запускаю последовательность методов, которые вы описываете с помощью Pika, я вижу запросы и ответы, отправленные в ожидаемом порядке.

Я изменил receive.py в код здесь , а также включил захват пакета с моей машины.

Я использую RabbitMQ 3.7.13, Erlang 21.3.2, Python 3.7.2 и Pika 0.13.1.

...