У меня проблемы с 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
Мы видели похожие проблемы, и мы используем клиент PHP, который не поддерживает сердцебиение.
Наше решение состоит в том, чтобы завершить работу всех процессов-потребителей до того, как экземпляры будут завершены, чтобы все соединения были полностью отключены. AFAIK EC2 попытается завершить работу, и у вас будет примерно минута, прежде чем машина выключится.
Пример :
[1] https://unix.stackexchange.com/questions/48973/execute-a-command-before-shutdown