RabbitMQ 不会关闭未确认消息的死连接

RabbitMQ 不会关闭未确认消息的死连接

我在 RabbitMQ 和死连接方面遇到了一些问题。我有一个 RabbitMQ 服务器和许多 ec2 实例,它们连接并从该服务器接收消息。问题是,有时当我需要终止 ec2 实例时,它与 RabbitMQ 服务器的连接并未关闭。

因此,我们开始看到未确认的消息永远不会回到就绪状态。我目前的做法是使用 rabbitmqctl 删除这些连接和/或使用我编写的 python 脚本来终止任何空闲时间超过 X 天的连接。

我已经尝试使用 heatrbeat[1] RabbitMQ 选项,但问题仍然存在。我想要做的是自动关闭任何“死”连接(长时间空闲)。

这是我在客户端而不是服务器端设置的吗?

RabbitMQ 是 3.3.4,我们在客户端上使用 py-amqp[2]。

[1]https://www.rabbitmq.com/configure.html [2]https://github.com/celery/py-amqp

答案1

我们看到了类似的问题,并且我们正在使用不支持心跳的 PHP 客户端。

我们的解决方案是在实例终止之前关闭所有消费者进程,这样所有连接都会干净地断开。据我所知,EC2 将尝试关闭,在机器关闭之前您将有一分钟左右的时间。

例子 :

[1]https://unix.stackexchange.com/questions/48973/execute-a-command-before-shutdown

相关内容