gpt4 book ai didi

python - RabbitMQ 心跳与连接耗尽事件超时

转载 作者:太空狗 更新时间:2023-10-29 21:58:18 25 4
gpt4 key购买 nike


我有一个 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

我想要的是,如果防火墙关闭了连接,那么我想重新连接。我应该使用心跳参数还是应该将超时参数(3600 秒)传递给 drain_events() 函数?
两种选择之间有什么区别? (似乎做同样的事情)。
谢谢。

最佳答案

drain_events 本身不会产生任何心跳,除非有消息要使用和确认。如果队列空闲,那么最终连接将被关闭(通过兔子服务器或您的防火墙)。

你应该做的是像这样同时使用心跳和超时:

while True:
try:
conn.drain_events(timeout=1)
except socket.timeout:
conn.heartbeat_check()

这样即使队列空闲也不会关闭连接。

除此之外,您可能希望用重试策略包装整个事情,以防连接确实关闭或出现其他一些网络错误。

关于python - RabbitMQ 心跳与连接耗尽事件超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33786536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com