![](/img/trans.png)
[英]How to connect pika to rabbitMQ remote server? (python, pika)
[英]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-python
或rabbitmq-users
郵件列表。 謝謝!
注意: RabbitMQ 團隊會監控rabbitmq-users
郵件列表,並且只是偶爾在 StackOverflow 上回答問題。
您可以在創建connection
時設置最小心跳間隔。
您可以在 pika 文檔中看到一個示例。
我建議不要禁用心跳,因為它可能會導致掛起的連接堆積在代理上。 我們在生產中遇到過這樣的問題。
始終確保連接具有最小的合理心跳。 如果心跳間隔需要很長(例如小時),請確保在應用程序崩潰或退出時關閉連接。 通過這種方式,您不會在代理端打開連接。
正如@Luke 提到的,心跳很有用,但如果您仍然想禁用它們,只需在創建連接時將心跳參數設置為零。 所以,
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.