![](/img/trans.png)
[英]Rabbitmq Blocking Connection to consume messages from RabbitMQ vs Using the Blocking Connection to get a message from RabbitMQ
[英]RabbitMQ heartbeat vs connection drain events timeout
我有一個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
我想要的是,如果防火牆關閉了連接,那么我想重新連接。 我應該使用heartbeat參數還是應該將超時參數(3600秒)傳遞給drain_events()
函數?
兩種選擇有什么區別? (似乎做同樣的事)。
謝謝。
除非有消息和確認消息,否則它自己的drain_events不會產生任何心跳。 如果隊列空閑,那么最終將關閉連接(由兔子服務器或防火牆)。
你應該做的是同時使用心跳和超時:
while True:
try:
conn.drain_events(timeout=1)
except socket.timeout:
conn.heartbeat_check()
這樣,即使隊列空閑,也不會關閉連接。
除此之外,您可能希望使用重試策略包裝整個事物,以防連接斷開或出現其他網絡錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.