我想要向RabbitMQ服务器发送一条消息,并等待回复消息(在“reply-to”队列上)。当然,我不想永远等待,以防应用程序处理这些消息的进程关闭 - 需要设置超时。这听起来像是一个非常基本的任务,但我找不到实现的方法。我现在使用py-amqplib和RabbitMQ .NET client都遇到了这个问题。
到目前为止,我得到的最佳解决方案是使用
到目前为止,我得到的最佳解决方案是使用
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)
肯定有更好的方式吧?