簡體   English   中英

如何使用 pika 和 rabbitmq 禁用心跳

[英]How to disable heartbeats with pika and rabbitmq

我正在使用 rabbitmq 來促進從我的兔子服務器到我各自的消費者的一些任務。 我注意到當我運行一些相當長的測試時,20 分鍾以上,我的消費者在完成它的任務后將失去與生產者的聯系。 在我的兔子日志中,我看到了錯誤

closing AMQP connection <0.14009.27> (192.168.101.2:64855 -> 
192.168.101.3:5672):
missed heartbeats from client, timeout: 60s

另外,我從 pika 收到此錯誤

pika.exceptions.ConnectionClosed: (-1, "error(10054, 'An existing connection was forcibly closed by the remote host')")

我假設這是由於這里的代碼以及心跳與冗長的阻塞連接時間的沖突。

 self.connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.101.2', 5672, 'user', credentials))
    self.channel = self.connection.channel()
    self.channel.queue_declare(queue=self.tool,
                               arguments={'x-message-ttl': 1000,
                                             "x-dead-letter-exchange": "dlx",
                                             "x-dead-letter-routing-key": "dl",
                                             'durable': True})

是否有適當的方法來增加心跳時間,或者我將如何完全關閉它(是否明智)? 就像我說的,超過 20 分鍾的測試似乎會導致關閉連接錯誤,但我從 1-15 分鍾開始運行了大量測試,一切正常,消費者客戶端繼續等待消息傳遞。

請不要禁用心跳。 相反,請正確使用 Pika。 這意味着:

  • 使用鼠兔版本0.12.0
  • 在單獨的線程中執行長時間運行的任務
  • 當您的任務完成時,使用add_callback_threadsafe方法來安排basic_ack調用。

示例代碼可以在這里找到: 鏈接

我是 RabbitMQ 核心團隊成員和 Pika 維護者,所以如果您有進一步的問題或問題,我建議跟進pika-pythonrabbitmq-users郵件列表。 謝謝!


注意: RabbitMQ 團隊會監控rabbitmq-users郵件列表,並且只是偶爾在 StackOverflow 上回答問題。

您可以在創建connection時設置最小心跳間隔。

您可以在 pika 文檔中看到一個示例。

我建議不要禁用心跳,因為它可能會導致掛起的連接堆積在代理上。 我們在生產中遇到過這樣的問題。

始終確保連接具有最小的合理心跳。 如果心跳間隔需要很長(例如小時),請確保在應用程序崩潰或退出時關閉連接。 通過這種方式,您不會在代理端打開連接。

正如@Luke 提到的,心跳很有用,但如果您仍然想禁用它們,只需在創建連接時將心跳參數設置為零。 所以,

  • 對於 URL 參數: connection = pika.BlockingConnection(pika.URLParameters("amqp://user:pass@127.0.0.1?heartbeat=0"))
  • 對於連接參數: connection = pika.BlockingConnection(pika.ConnectionParameters(heartbeat=0))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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