pika教程中的所有示例都以客户端调用start_consuming()
结束,这会启动无限循环。这些例子对我有用。
但是,我不希望我的客户端永远运行。相反,我需要我的客户端消费消息一段时间,比如15分钟,然后停止。
我如何做到这一点?
答案 0 :(得分:14)
您可以使用自己的循环一次使用一条消息,例如,您有channel
和queue
设置。以下将检查队列是否为空,如果没有,则弹出一条消息。
queue_state = channel.queue_declare(queue, durable=True, passive=True)
queue_empty = queue_state.method.message_count == 0
声明已存在的队列,并设置被动标志允许您查询其状态。接下来我们处理一条消息:
if not queue_empty:
method, properties, body = channel.basic_get(queue, no_ack=True)
callback_func(channel, method, properties, body)
这里callback_func
是我们正常的回调。当你想以这种方式处理时,确保不在队列中注册回调。
# DO NOT
channel.basic_consume(callback_func, queue, no_ack=True)
这将使手动消耗做奇怪的事情。我已经看到如果我事先做过这个调用,queue_declare代码实际上会处理一条消息。