python - 我没有手动确认消息,然后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
"""
解决方案
当您提出问题时,您必须提供您正在使用的所有软件的名称和版本。在这种情况下,您使用的是什么版本的 RabbitMQ、Erlang、Python 以及什么 Python 库。
但如果我现在不确认该消息,它将在 1 分钟后使用相同的消息。
这可能是因为您的sleep
调用阻塞了心跳消息,并且 RabbitMQ 认为您的客户端应用程序已死。RabbitMQ 将关闭连接并重新排队消息。
如果您使用的是 Pika 库,则您的代码不正确。您无法确认来自另一个线程的消息。
请参阅此示例代码,了解如何正确确认来自另一个线程的消息。
注意: RabbitMQ 团队会监控rabbitmq-users
邮件列表,有时只会在 StackOverflow 上回答问题。
推荐阅读
- r - R 使用 lapply 保存图
- xml - 大家好,我在 ActivityMain.xml 的屏幕预览中遇到了丢失标题栏的问题
- html - 让屏幕阅读器读出 div 中的所有文本
- r - R-在udf中使用gsub
- java - 使用模式匹配从文件中排序,Java
- r - 如何在 R 中有效地创建具有多个键的哈希/查找表
- r - 如何将图例符号与ggplot2上的包装图例文本对齐
- javascript - d3 v5.8 是否发布了使用数字时的样式转换中断?
- javascript - 来自 Cloudflare CDN 的链接 jQuery 脚本在“sub-include”下划线 min.js 的控制台中引发 CSP 错误
- git - Gitlab committer's email does "X" does not follow the pattern "Y", but git email config is "X"