使用SelectConnection延迟消息使用

时间:2016-07-01 11:53:42

标签: python python-2.7 rabbitmq pika

我想用SelectConnection编写一个使用者。

我们的网络基础架构中有几个设备在一段时间后关闭连接,因此我想使用心跳功能。

据我所知,IOLoop在主线程上运行,因此在此线程处理消息时无法处理心跳帧。

我的想法是创建几个处理消息的工作线程,以便主线程可以处理IOLoop。消息的处理需要大量资源,因此一次只能处理一定数量的消息。我不想将剩余的消息存储在客户端,而是将它们留在队列中。

有没有办法在不中断心跳的情况下中断消息的消耗?

1 个答案:

答案 0 :(得分:0)

我不是pika的SelectConnection专家,但您可以通过将Consumer Prefetch (QoS)设置为所需的进程数来实现此目的。

这基本上意味着一旦消息进入,您将其卸载到进程或线程,一旦处理完消息,您就会确认该消息已被处理。

例如,如果您将QoS设置为10.客户端最多会提取10条消息,并且在至少其中一条消息被确认之前不会提取任何新消息。

这里的重要部分是,只有在完成处理后才需要确认消息。