Как изменить RabbitMQ Heartbeat без перезагрузки - PullRequest
2 голосов
/ 04 июля 2019

В SO есть несколько вопросов по поводу пульса RabbitMQ, но я не нашел ни одного, который бы касался того, как на самом деле изменить значение пульса по умолчанию 60 seconds (580 seconds в предыдущих версиях).

В случае, если потребитель работает дольше, чем 60 seconds и не способен генерировать какой-либо трафик, который будет считаться тактовым импульсом (например, потребители PHP ), RabbitMQ закроет соединение с учетом потребителя не работает, но потребитель может продолжать работать, и когда он пытается произвести ACK, соединение закрывается, и вы получаете сообщение об ошибке, например:

Разбитая труба или замкнутое соединение

Можно установить сердцебиение на стороне потребителя на более высокое значение, например 1800 seconds, но если конфигурация посредника не изменится, тогда будет использоваться более низкое значение, в случае значения по умолчанию, тогда 60 seconds , Из документов RabbitMQ:

Брокер и клиент будут пытаться согласовать тактовые импульсы по умолчанию. Когда оба значения не равны 0, нижнее из запрошенных значений будет используемый. Если одна сторона использует нулевое значение (пытается отключить сердцебиение) а другой нет, будет использоваться ненулевое значение.

Чтобы изменить значение Heartbeat, можно добавить следующую строку в /etc/rabbitmq/rabbitmq.conf (используя новый формат конфигурации )

heartbeat = 1800

Это требует перезапуска, поэтому вопрос: Как изменить значение ритма rabbitmq без перезапуска?

1 Ответ

3 голосов
/ 04 июля 2019

Я отвечаю на свой вопрос, поскольку мне потребовалось некоторое время, чтобы найти, как это сделать, документация о том, как использовать eval, была не очень полезна.

можно изменить значения конфигурации RabbitMQ с помощью eval :

Оценить произвольное выражение Эрланга.

С помощью rabbitmqctl eval можно изменить пульсзначение без перезапуска вот так:

# Set
rabbitmqctl eval 'application:set_env(rabbit, heartbeat, 1800).'

# Get 
rabbitmqctl eval 'application:get_env(rabbit, heartbeat).'
...