如何用pika和rabbitmq禁用心跳

问题描述 投票:0回答:2

我正在使用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分钟内完成了大量测试,一切都很好,消费者客户端继续等待消息传递。

python rabbitmq pika
2个回答
6
投票

请不要禁用心跳。相反,正确使用Pika。这意味着:

  • 使用Pika版0.12.0
  • 在单独的线程中执行长时间运行的任务
  • 任务完成后,使用add_callback_threadsafe方法安排basic_ack调用。

示例代码可以在这里找到:link

我是RabbitMQ核心团队成员和Pika维护者,所以如果您有其他问题或疑问,我建议您跟进pika-pythonrabbitmq-users邮件列表。谢谢!


注意:RabbitMQ团队监控the rabbitmq-users mailing list,有时只回答StackOverflow上的问题。


1
投票

您可以在创建connection时设置最小心跳间隔。

你可以在pika documentation中看到一个例子。

我建议不要禁用心跳,因为它可能导致挂起连接堆积在代理上。我们在生产中遇到过这样的问题

始终确保连接具有最小的合理心跳。如果心跳间隔需要很长(例如几小时),请确保在应用程序崩溃或退出时关闭连接。这样,您就不会在代理端打开连接。

© www.soinside.com 2019 - 2024. All rights reserved.