我想向 RabbitMQ 服务器发送一条消息,然后等待回复消息(在回复"队列上).当然,我不想永远等待,以防处理这些消息的应用程序出现故障 - 需要超时.这听起来像是一项非常基本的任务,但我找不到这样做的方法.我现在遇到了 py-amqplib 和 RabbitMQ .NET 客户端.
I'd like to send a message to a RabbitMQ server and then wait for a reply message (on a "reply-to" queue). Of course, I don't want to wait forever in case the application processing these messages is down - there needs to be a timeout. It sounds like a very basic task, yet I can't find a way to do this. I've now run into this problem with both py-amqplib and the RabbitMQ .NET client.
到目前为止,我得到的最佳解决方案是使用 basic_get 和中间的 sleep 进行轮询,但这很丑:
The best solution I've got so far is to poll using basic_get with sleep in-between, but this is pretty ugly:
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)
肯定有更好的方法吗?
我刚刚在 carrot 中添加了对 amqplib 的超时支持.
I just added timeout support for amqplib in carrot.
这是 amqplib.client0_8.Connection 的子类:
http://github.com/询问/carrot/blob/master/carrot/backends/pyamqplib.py#L19-97
wait_multi 是 channel.wait 的一个版本,能够接收任意数字频道.
wait_multi is a version of channel.wait able to receive on an arbitrary number
of channels.
我想这可能会在某个时候在上游合并.
I guess this could be merged upstream at some point.
这篇关于等待一条带有超时的 RabbitMQ 消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
读取 XML 时忽略空格Ignore whitespace while reading XML(读取 XML 时忽略空格)
使用 HTMLAgilityPack 仅提取页面文本extracting just page text using HTMLAgilityPack(使用 HTMLAgilityPack 仅提取页面文本)
C# 从 XML 中提取数据C# extracting data from XML(C# 从 XML 中提取数据)
读取 XML(从字符串)并获取一些字段 - 读取 XML 时出Read a XML (from a string) and get some fields - Problems reading XML(读取 XML(从字符串)并获取一些字段 - 读取 XML 时出现问题)
在 .net 中读取大型 XML 文档Reading large XML documents in .net(在 .net 中读取大型 XML 文档)
如何使用 .NET API 在 Google Drive 中创建文件夹?How to create folder in Google Drive using .NET API?(如何使用 .NET API 在 Google Drive 中创建文件夹?)