我遵循了官方RabbitMQ site上的示例,然后尝试将其进一步发展。我尝试将相同的RPC逻辑应用于单个服务器和多个客户端。按照这些示例,我现在正在使用BlockingConnection()
。每个客户端都循环调用process_data_events()
函数,并检查其是否与correlation_id
相对应。 所有客户端都在同一callback_queue上检查其关联ID 。
例如,在2个客户端和1个服务器的设置中,有2个队列。两个客户端都发布到的一个,两个客户端都检查对应的correlation_id
的一个。该代码可以完美地在单个客户端和单个服务器(甚至多个服务器)上运行,但是当多个客户端在callback_queue上使用时,该代码将无法正常工作。
我的实验表明,当一个客户(通过process_data_events()
)收到的ID并非他们的ID时,该ID永远不会被其他客户处理。因此,由于在相当长的时间内未发送心跳,所以发生了超时或连接断开。发生问题之后的函数是channel.basic_consume(queue='callback',on_message_callback=on_resp)
我应该为每个客户端使用唯一的回调队列吗?该文档并没有我希望的那样有用,您有建议我学习的东西吗?
如果您要求我,我可以发布最少的代码来重现该问题。
预先感谢
编辑::此repo包含用于重现此问题的最少代码以及更多详细信息。