Как изменить RabbitMQ Heartbeat без перезагрузки

Здесь в 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 без перезагрузки?


person lloiacono    schedule 04.07.2019    source источник


Ответы (1)


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

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

Вычислите произвольное выражение Erlang.

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

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

# Get 
rabbitmqctl eval 'application:get_env(rabbit, heartbeat).'
person lloiacono    schedule 04.07.2019
comment
Это повлияет только на новые подключения. - person Luke Bakken; 08.07.2019
comment
@LukeBakken Действительно, невозможно изменить пульс для уже установленных соединений. Я просто проверил это, чтобы быть уверенным. Спасибо - person lloiacono; 09.07.2019