如果连接 idle/Not 耗时很长,请停止 channel.basic_consume

Stop channel.basic_consume if the connection is idle/Not consuming from long time

我有一个用例,我想在其中获取 pika 消费者 (pika.BlockingConnection) 的最后空闲时间(最后一条消息处理时间)。
用例:
如果上次处理时间大于阈值时间(例如:1 小时)。我希望消费者退出或有一个回调方法来决定我需要做什么?就像向用户发送通知一样。

有什么办法吗?

鼠兔支持timeout callback.

您可以在每个消息接收的末尾添加此回调,保留对它的引用,并在每个消息接收的开头删除它。

def close_connec():
    # close here

timer_id = None

def on_message(chan, method, props, body):
    if timer_id is not None:
        chan.connection.remove_timeout(timer_id)
    # process message
    timer_id = chan.connection.add_timeout(3600, close_connec)