如何在有限的时间内通过鼠兔消费RabbitMQ消息?

Ale*_*exC 9 python rabbitmq python-2.7 pika

pika教程中的所有示例都以客户端调用结束start_consuming(),这会启动无限循环.这些例子对我有用.

但是,我不希望我的客户端永远运行.相反,我需要我的客户端消耗消息一段时间,例如15分钟,然后停止.

我该如何做到这一点?

Mik*_*ike 14

你可以用自己的循环时间消耗的消息之一,说你有一个channelqueue设置.以下将检查队列是否为空,如果不是,则弹出一条消息.

queue_state = channel.queue_declare(queue, durable=True, passive=True)
queue_empty = queue_state.method.message_count == 0
Run Code Online (Sandbox Code Playgroud)

声明已存在的队列,并设置被动标志允许您查询其状态.接下来我们处理一条消息:

if not queue_empty:
    method, properties, body = channel.basic_get(queue, no_ack=True)
    callback_func(channel, method, properties, body)
Run Code Online (Sandbox Code Playgroud)

callback_func是我们正常的回调.当您想要以这种方式处理时,请确保向队列注册回调.

# DO NOT
channel.basic_consume(callback_func, queue, no_ack=True)
Run Code Online (Sandbox Code Playgroud)

这将使手动消耗做奇怪的事情.我已经看到如果我事先做过这个调用,queue_declare代码实际上会处理一条消息.