RabbitMQ / pika - один обратный вызов RPC для нескольких клиентов - PullRequest
0 голосов
/ 06 мая 2019

Я следовал примерам на официальном сайте RabbitMQ и затем попытался сделать еще один шаг вперед. Я попытался применить ту же логику RPC с одним сервером и несколькими клиентами. Следуя примерам, я сейчас использую BlockingConnection(). Каждый клиент вызывает в цикле функцию process_data_events() и проверяет ее на соответствие correlation_id. Все клиенты проверяют свои идентификаторы корреляции в одной и той же callback_queue .

Например, при настройке 2 клиентов и 1 сервера есть 2 очереди. Тот, который оба клиента публикуют, и тот, который оба клиента проверяют на соответствующий correlation_id. Код работает безупречно с одним клиентом и одним сервером (или даже несколькими серверами), но не работает, когда более чем один клиент использует запрос callback_queue.

Мои эксперименты показали, что когда клиент получает (через process_data_events()) идентификатор, который не принадлежит ему, этот идентификатор не обрабатывается другим клиентом, никогда. Следовательно, происходит тайм-аут или соединение прерывается, так как в течение некоторого времени не отправляется пульс. Функция, после которой возникает проблема: channel.basic_consume(queue='callback',on_message_callback=on_resp)

Должен ли я использовать уникальную очередь обратного вызова для каждого клиента? Документация оказалась не такой полезной, как я бы надеялся, есть что-то, что вы бы мне посоветовали изучить?

Я могу опубликовать минимальный код для воспроизведения проблемы, если вы попросите меня.

Заранее спасибо

РЕДАКТИРОВАТЬ: Это репо содержит минимальный код для воспроизведения проблемы, а также некоторые дополнительные сведения.

...