Mr *_* T. 7 python timeout heartbeat rabbitmq kombu
我有一个rabbitmq服务器和一个使用kombu的amqp使用者(python).
我已将我的应用程序安装在具有防火墙的系统中,该防火墙在1小时后关闭空闲连接.
这是我的amqp_consumer.py:
try:
# connections
with Connection(self.broker_url, ssl=_ssl, heartbeat=self.heartbeat) as conn:
chan = conn.channel()
# more stuff here
with conn.Consumer(queue, callbacks = [messageHandler], channel = chan):
# Process messages and handle events on all channels
while True:
conn.drain_events()
except Exception as e:
# do stuff
Run Code Online (Sandbox Code Playgroud)
我想要的是,如果防火墙关闭了连接,那么我想重新连接.我应该使用heartbeat参数还是应该将超时参数(3600秒)传递给drain_events()函数?
两种选择有什么区别?(似乎做同样的事).
谢谢.
Drain_events 本身不会产生任何心跳,除非有消息要使用和确认。如果队列空闲,那么最终连接将被关闭(通过兔子服务器或防火墙)。
你应该做的是同时使用心跳和超时,如下所示:
while True:
try:
conn.drain_events(timeout=1)
except socket.timeout:
conn.heartbeat_check()
Run Code Online (Sandbox Code Playgroud)
这样,即使队列空闲,连接也不会关闭。
除此之外,您可能希望使用重试策略来包装整个过程,以防连接关闭或出现其他网络错误。
| 归档时间: |
|
| 查看次数: |
981 次 |
| 最近记录: |