我没有手动确认消息,然后rabbitmq在1分钟后再次发出消息,我可以延长这个时间吗?

时间:2019-04-16 09:49:36

标签: python rabbitmq

在我的python3代码中。当我收到一条消息时,首先我需要做长时间的工作。所以我想在工作完成时确认消息。但是,如果我现在不确认该消息,它将在1分钟后消耗相同的消息。所以,我想知道我可以设置更长的时间吗?

我的代码:

def do_work(body, tag):
    print(datetime.datetime.now(), 'I get body:', body, tag)
    # simulate a long time job
    time.sleep(70)
    # ack the message
    channel.basic_ack(tag)

if __name__ == '__main__':
    for method, properties, body in channel.consume('dolphin'):
    t = Thread(target=do_work, args=(body, method.delivery_tag))
    t.start()

""" console output:
2019-04-16 17:32:02.200645 I get body: b'2019-04-16 17:31:31.440033' 1
2019-04-16 17:33:05.879708 I get body: b'2019-04-16 17:31:31.440033' 2
2019-04-16 17:34:10.885120 I get body: b'2019-04-16 17:31:31.440033' 3
"""

1 个答案:

答案 0 :(得分:0)

提出问题时,必须必须提供正在使用的所有软件的名称和版本。在这种情况下,请使用什么版本的RabbitMQ,Erlang,Python以及正在使用的Python库。

  

但是,如果我现在不确认该消息,它将消耗   1分钟后显示相同的消息。

这可能是因为您的sleep呼叫阻止了心跳消息,而RabbitMQ认为您的客户端应用程序已死。 RabbitMQ将关闭连接并重新排队该消息。

如果您使用的是Pika库,则您的代码不正确。您无法确认来自其他线程的消息。

有关如何正确确认来自另一个线程的消息,请参见this example code


注意: RabbitMQ团队监视rabbitmq-users mailing list,并且有时仅在StackOverflow上回答问题。