如何解决当 auto_ack=False
我正在使用 Twisted 的 RabbitMQ 使用者,详细说明 here。我有一个简单的网络爬虫(scrapy,也基于 Twisted),其中我使用要从 RabbitMQ 队列中爬取的 URL,一旦爬取的数据被处理(成功或失败),我就会发回确认并对请求重新排队(我使用 delayed message plugin 以便不会立即重新抓取网址,而是仅在指定的时间增量之后重新抓取)。
处理爬取的数据只需要不到一分钟(最坏的情况)。我在单个 CPU 单线程程序上运行爬虫。我知道 RabbitMQ 的 heartbeat
逻辑,因此我在 hearbeat=0
中设置了 pika.ConnectionParameters
。
然而,大约一个小时的爬行后,我收到以下错误:
rabbitmq_1 | 2021-05-10 13:57:14.448 [warning] <0.1576.0> Consumer ctag1.9daa292d7d304072836de1e3f2dc540e on channel 1 has timed out waiting on consumer acknowledgement. Timeout used: 900000 ms
rabbitmq_1 | 2021-05-10 13:57:14.654 [error] <0.1576.0> Channel error on connection <0.1569.0> (172.18.0.4:52344 -> 172.18.0.2:5672,vhost: '/',user: 'guest'),channel 1:
rabbitmq_1 | operation none caused a channel exception precondition_failed: consumer ack timed out on channel 1
scrapy_1 | 2021-05-10 13:57:15 [pika.channel] WARNING: Received remote Channel.Close (406): 'PRECONDITION_FAILED - consumer ack timed out on channel 1' on <Channel number=1 OPEN conn=<pika.adapters.twisted_connection._TwistedConnectionAdapter object at 0x7f010f9b8b80>>
错误说一些 ack 在超时 90000 毫秒后超时,但是,我在处理一个小时后收到此错误。
有什么线索吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。