Нюансы подключения к ActiveMQ Artemis в обычном и кластерном режиме

Нюансы подключения к ActiveMQ Artemis в обычном и кластерном режиме

Проблема — клиент не восстанавливает подключение к серверу ActiveMQ после обрыва соединения. Здесь зависит от режима соединения.


При обычном (не кластерном) соединении достаточно установить параметр reconnectAttempts=-1. Это заставит клиента бесконечно пытаться подключиться к узлу, с которым изначально было установлено соединение. По-умолчанию параметр установлен в значение 0, что запрещает попытки переподключения, также можно установить конкретное число попыток, например reconnectAttempts=5.

В итоге соединение должно выглядеть примерно следующим образом:

quarkus.artemis.url=tcp://127.0.0.1:61616?clientFailureCheckPeriod=5000&retryInterval=1000&reconnectAttempts=-1&callTimeout=3000

При кластерном подключении, значение параметра reconnectAttempts=-1 сыграет с Вами злую шутку, т.к. при отваливании live-ноды кластера переподключение к новой live-ноде не произойдёт и приложение просто скажет Вам:

Connection failure to 127.0.0.1/127.0.0.1:61616 has been detected: AMQ219015: The connection was disconnected because of server shutdown [ code=DISCONNECTED]

Это из-за того, что клиент будет бесконечно пробовать переподключиться к той ноде, к которой он был подключен изначально, и ему абсолютно без разницы, что она умерла, что используется режим ha=true, что в url перечислен список нод для подключения.

Поэтому в кластерном варианте подключения, значение reconnectAttempts=-1 не допускается, нужно использовать конечное число попыток, например, reconnectAttempts=5. Но это ещё не всё: клиенту нужно указать количество попыток подклечения к другой live-ноде кластера, т.к. по-умолчанию переподключение к другим нодам отключено. Да, и пофиг что ha=true и url содержит список адресов нод, — переподключений не будет, пока не зададите параметр failoverAttempts отличный от 0. Используем бесконечное количество попыток переподключения к нодам: failoverAttempts=-1.

Ну и соответственно не забываем указать режим ha и перечислить список нод в url. В итоге соединение должно выглядеть примерно следующим образом:

quarkus.artemis.url=(tcp://127.0.0.1:61616,tcp://127.0.0.1:61617)?ha=true&clientFailureCheckPeriod=5000&retryInterval=1000&reconnectAttempts=5&callTimeout=3000&failoverAttempts=-1
(Просмотрено 641 раз, 1 раз за сегодня)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *