如何使用pika和Rabbitmq禁用心跳

UCP*_*mer 1 python rabbitmq pika

我正在使用Rabbitmq来完成一些从我的Rabbit服务器到我的使用者的任务。我注意到,当我进行一些相当长时间的测试(20分钟以上)时,我的消费者将在完成任务后与生产者失去联系。在我的兔子日志中,我看到了错误

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

另外,我从pika收到此错误

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

我假设这是由于此处的代码以及心跳与长时间阻塞连接时间的冲突所致。

 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})
Run Code Online (Sandbox Code Playgroud)

是否有适当的方法来增加心跳时间,或者我如何将其完全关闭(明智的做法)?就像我说的那样,超过20分钟的测试似乎会导致闭合连接错误,但是从1-15分钟的标记开始,我已经进行了大量测试,一切正常,消费者客户端继续等待消息传递。

Luk*_*ken 7

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

  • 使用皮卡版本 0.12.0
  • 在单独的线程中执行长时间运行的任务
  • 任务完成后,请使用该add_callback_threadsafe方法安排basic_ack呼叫。

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

我是RabbitMQ核心团队的成员,也是Pika的维护者,因此,如果您还有其他疑问或问题,建议在pika-pythonrabbitmq-users邮件列表中进行跟进。谢谢!


注:在RabbitMQ的团队监控rabbitmq-users邮件列表,只有时StackOverflow上回答问题。

  • 这实际上是推荐的方法。不过恕我直言,这应该是 Pika 提供的东西。推动用户使用 MT 并不理想。特别是考虑到现在 Pika 有阻塞连接。 (2认同)