我想向 RabbitMQ 服务器发送一条消息,然后等待回复消息(在“回复”队列上)。当然,我不想永远等待,以防处理这些消息的应用程序出现故障 - 需要超时。这听起来像是一项非常基本的任务,但我找不到这样做的方法。我现在在py-amqplib和RabbitMQ .NET 客户端都遇到了这个问题。
到目前为止我得到的最好的解决方案是使用中间进行轮询basic_get
,sleep
但这很丑陋:
def _wait_for_message_with_timeout(channel, queue_name, timeout):
slept = 0
sleep_interval = 0.1
while slept < timeout:
reply = channel.basic_get(queue_name)
if reply is not None:
return reply
time.sleep(sleep_interval)
slept += sleep_interval
raise Exception('Timeout (%g seconds) expired while waiting for an MQ response.' % timeout)
当然有更好的方法吗?