首页 > 解决方案 > 我没有手动确认消息,然后rabbitmq在1分钟后再次给它,我可以延长这个时间吗?

问题描述

在我的 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
"""

标签: pythonrabbitmq

解决方案


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

但如果我现在不确认该消息,它将在 1 分钟后使用相同的消息。

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

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

请参阅此示例代码,了解如何正确确认来自另一个线程的消息。


注意: RabbitMQ 团队会监控rabbitmq-users 邮件列表,有时只会在 StackOverflow 上回答问题。


推荐阅读