我在使用RabbitMQ时遇到了一些问题。 我有一个RabbitMQ服务器和许多ec2实例,连接并消费来自这个服务器的消息。 问题是,有时当我需要终止一个ec2实例,它与RabbitMQ服务器的连接没有closures。
正因为如此,我们开始看到从未回到就绪状态的消息。 我现在所做的就是使用rabbitmqctl来删除这个连接,并且/或者使用我写的python脚本来杀死任何空闲超过X天的连接。
我已经尝试使用heatrbeat [1] RabbitMQ选项,但问题仍然存在。 我想做的是自动closures任何“死”(闲置很长时间)的连接。
这是我设置在客户端,而不是服务器端?
RabbitMQ是3.3.4,我们在客户端使用py-amqp [2]。
[1] https://www.rabbitmq.com/configure.html [2] https://github.com/celery/py-amqp
我们看到类似的问题,我们正在使用不支持心跳的PHP客户端。
我们的解决scheme是在实例终止之前closures所有消费者进程,因此所有的连接都被彻底断开。 AFAIK EC2将尝试closures,在机器断电之前,您将有一分钟左右的时间。
例如:
[1] https://unix.stackexchange.com/questions/48973/execute-a-command-before-shutdown