RabbitMQ中的解决方案等待带有超时的消息并等待带有超时的单个RabbitMQ消息似乎不起作用,因为官方C#库中没有下一个交付方法并且QueueingBasicConsumer被删除,因此它只会在任何地方抛出NotSupportedException.
如何从队列中等待指定超时的单个消息?
PS
它可以通过Basic.Get()来完成,是的,但是,在指定的时间间隔(超额流量,多余的CPU)中拉取消息是不好的解决方案.
更新
EventingBasicConsumer by implmenetation不支持立即取消.即使您在某个时刻调用BasicCancel,即使您通过BasicQos指定预取- 它仍将在帧中获取,并且这些帧可以包含多个消息.因此,单个任务执行并不好.不要打扰 - 它只是不适用于单个消息.
我想向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)
Run Code Online (Sandbox Code Playgroud)
当然还有更好的方法吗?