在我的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
"""
答案 0 :(得分:0)
提出问题时,必须必须提供正在使用的所有软件的名称和版本。在这种情况下,请使用什么版本的RabbitMQ,Erlang,Python以及正在使用的Python库。
但是,如果我现在不确认该消息,它将消耗 1分钟后显示相同的消息。
这可能是因为您的sleep
呼叫阻止了心跳消息,而RabbitMQ认为您的客户端应用程序已死。 RabbitMQ将关闭连接并重新排队该消息。
如果您使用的是Pika库,则您的代码不正确。您无法确认来自其他线程的消息。
有关如何正确确认来自另一个线程的消息,请参见this example code。
注意: RabbitMQ团队监视rabbitmq-users
mailing list,并且有时仅在StackOverflow上回答问题。