我正在使用 pika 0.10.0 和 python 2.7 版本开发 RabbitMQ 消费者。在我的消费者客户端中,我有一个根据输入消息运行一段时间的进程。时间可能从 3 到 40 分钟不等。
我不想禁用心跳。相反,我正在寻找一些回滚机制,该机制可以使连接保持活动状态,直到发送回delivery_tag。那可能吗?
我得到的链接很少,所有链接都建议禁用心跳作为解决方法。但我不想禁用它。
Ref:
套接字错误:104 使用耗时较长的任务消耗消息 #753 https://github.com/pika/pika/issues/753
BlockingConnection 意外关闭 #734 https://github.com/pika/pika/issues/734
另外,如果需要任何额外信息,请告诉我。
提前致谢。
唯一的解决办法是定期发送心跳帧。
当使用BlockingConnection
,你必须调用process_data_events https://pika.readthedocs.io/en/0.11.0/modules/adapters/blocking.html#pika.adapters.blocking_connection.BlockingConnection.process_data_events功能足够频繁(atime_limit
零就可以了)。当使用SelectConnection
或其他异步适配器,您必须确保没有任何进程被阻塞,以便可以发送帧。
如果您的任务运行时间较长,并且由于某种原因无法轻松中断或拆分进程,则可以在另一个线程/进程中运行该任务,并且仍然让鼠兔从主线程发送帧。请记住,您应该避免跨线程使用 pika 连接(pika 目前不是线程安全的)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)