使用 SelectConnection 延迟消息消费
Delay message consumption with SelectConnection
我想编写一个带有 SelectConnection 的消费者。
我们的网络基础设施中有几个设备会在一定时间后关闭连接,因此我想使用心跳功能。
据我所知,IOLoop 运行在主线程上,因此当该线程正在处理消息时无法处理心跳帧。
我的想法是创建几个处理消息的工作线程,以便主线程可以处理 IOLoop。消息的处理会占用大量资源,因此一次只能处理一定数量的消息。我不想将剩余的消息存储在客户端,而是将它们留在队列中。
有没有办法在不中断心跳的情况下中断消息的消费?
我不是 pika 的 SelectConnection 方面的专家,但您可以通过将 Consumer Prefetch (QoS) 设置为所需的进程数来实现这一点。
这基本上意味着一旦有消息进入,您将其卸载到进程或线程,一旦消息被处理,您就会确认消息已被处理。
例如,如果您将 QoS 设置为 10。客户端将最多提取 10 条消息,并且在至少确认其中一条消息之前不会提取任何新消息。
这里的重要部分是您只需在处理完消息后才需要确认消息。
我想编写一个带有 SelectConnection 的消费者。
我们的网络基础设施中有几个设备会在一定时间后关闭连接,因此我想使用心跳功能。
据我所知,IOLoop 运行在主线程上,因此当该线程正在处理消息时无法处理心跳帧。
我的想法是创建几个处理消息的工作线程,以便主线程可以处理 IOLoop。消息的处理会占用大量资源,因此一次只能处理一定数量的消息。我不想将剩余的消息存储在客户端,而是将它们留在队列中。
有没有办法在不中断心跳的情况下中断消息的消费?
我不是 pika 的 SelectConnection 方面的专家,但您可以通过将 Consumer Prefetch (QoS) 设置为所需的进程数来实现这一点。
这基本上意味着一旦有消息进入,您将其卸载到进程或线程,一旦消息被处理,您就会确认消息已被处理。
例如,如果您将 QoS 设置为 10。客户端将最多提取 10 条消息,并且在至少确认其中一条消息之前不会提取任何新消息。
这里的重要部分是您只需在处理完消息后才需要确认消息。