簡體   English   中英

RabbitMQ心跳與連接排除事件超時

[英]RabbitMQ heartbeat vs connection drain events timeout


我有一個rabbitmq服務器和一個使用kombu的am​​qp使用者(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM