Я следовал примерам на официальном сайте 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)
Должен ли я использовать уникальную очередь обратного вызова для каждого клиента? Документация оказалась не такой полезной, как я бы надеялся, есть что-то, что вы бы мне посоветовали изучить?
Я могу опубликовать минимальный код для воспроизведения проблемы, если вы попросите меня.
Заранее спасибо
РЕДАКТИРОВАТЬ: Это репо содержит минимальный код для воспроизведения проблемы, а также некоторые дополнительные сведения.