Что такое разумное значение для сердечного ритма в RabbitMQ?

RabbitMQ позволяет "подключать" соединение, то есть время от времени клиент и сервер проверяют (используя пустые сообщения), что другая сторона все еще существует и доступна. Пока что так хорошо.

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

Очевидно, что это не должно быть слишком часто (трафик), но также не слишком редко (прокси,...). Любые предложения?

Хорошо ли 15 секунд? 30? 60?...

Ответы

Ответ 1

Документация RabbitMQ теперь предлагает рекомендуемое значение тайм-аута сердцебиения от 5 до 20 секунд:

Слишком низкое значение тайм-аута сердечного ритма может привести к ложным срабатываниям (одноранговое соединение считается недоступным, в то время как это действительно не так) из-за переходных перегрузок в сети, недолговечного управления потоком сервера и т.д. Это следует учитывать при выборе значения тайм-аута.

Несколько лет назад отзывы пользователей и клиентских библиотек говорят о том, что значения менее 5 секунд, скорее всего, вызовут ложные срабатывания, а значения 1 секунды или ниже, скорее всего, сделают это. Значения в диапазоне от 5 до 20 секунд оптимальны для большинства сред.

Источник: https://www.rabbitmq.com/heartbeats.html#false-positives

Кроме того, с RabbitMQ 3.5.5 значение тайм-аута по умолчанию составляет 60 секунд (https://www.rabbitmq.com/heartbeats.html#heartbeats-timeout)

Ответ 2

Этот ответ, если для RabbitMQ < 3.5.5, для более новых версий см. Ответ от @bmaupin.

Это зависит от ваших потребностей приложения. Из коробки 10 минут для RabbitMQ. Если вам не удастся удвоить сердцебиение (20 минут бездействия), соединение будет немедленно закрыто без отправки какого-либо метода connect.close или любой ошибки со стороны брокера.

Случай использования heartbeat - это брандмауэры, которые закрывают неактивное соединение в течение длительного времени или некоторые другие сетевые настройки, которые не позволяют ожидать подключения.

На самом деле, hearbeat не обязателен, из RabbitMQ config doc

сердцебиения

Значение, представляющее задержку сердечного ритма, в секундах, которое сервер отправляет в кадре connection.tune. Если установлено значение 0, сердечные сокращения отключены. Клиенты могут не следовать рекомендациям сервера, см. Ссылку AMQP для получения более подробной информации. Отключение биений может повысить производительность в ситуациях с большим количеством подключений, но может привести к отключению соединений в присутствии сетевых устройств, которые закрывают неактивные соединения. По умолчанию: 580

Обратите внимание, что слишком короткий интервал прослушивания может привести к значительным сетевым издержкам. Имейте в виду, что эти звуковые кадры отправляются, когда нет другой активности в соединении для временного интервала слышимости.