python - Qpid Proton Python:长时间工作后未重新连接
问题描述
我正在将 Qpid Proton Python 用于 AMQP 消费者,该消费者运行可以持续 +1 分钟的作业。
工作完成后,我得到一个connection_closed
with Condition('amqp:resource-limit-exceeded', 'local-idle-timeout expired')
。
我知道发生这种情况是因为我的阻塞工作正在阻止心跳。
令我困惑的是为什么我没有重新连接。调试质子,我得到这行代码,其中self.connection.state
的值为36,所以self.connection.state & Endpoint.LOCAL_ACTIVE
返回 0。
- 这是为什么?我可以做些什么来启用重新连接吗?
- 我可以在客户端做些什么来避免首先断开连接吗?
这是重现该场景的工作代码:
from __future__ import print_function
from time import sleep
from proton.handlers import MessagingHandler
from proton.reactor import Container
class ExampleConsumer(MessagingHandler):
def __init__(self, queue):
super().__init__(2, False)
self.queue = queue
def on_start(self, event):
self.container = event.container
self.conn = event.container.connect(url='localhost:5672')
self.receiver = event.container.create_receiver(self.conn, self.queue)
print('listening for new messages on /' + self.queue)
def on_message(self, event):
print('sleeping 60')
sleep(60)
print('done sleeping')
self.accept(event.delivery)
def on_connection_error(self, event):
print('connection_error', event.connection.condition, event.connection.remote_condition)
try:
Container(ExampleConsumer('examples')).run()
except KeyboardInterrupt: pass
解决方案
推荐阅读
- python - 拥有熊猫数据框,条件后输出特定列
- mysql - MySQL 搜索列并替换文本
- reactjs - react-google-maps onBoundsChanged
- python - 同时运行多个浏览器的问题
- java - 字符串数组的读取
- python - 将python添加到路径中
- java - 如何在 LocalTime 中设置必要的时区
- vba - 使用 VBA 在 Microsoft Word 中隐藏 2 行
- java - 为 jboss/Keycloak 设置 ssl/https
- reactjs - 有没有办法根据用户发送给反应 js 聊天应用程序的图像的大小和分辨率来调整图像大小