Я не смог найти четкую документацию о том, как переподключение клиента JMS работает с логикой отработки отказа. Я проконсультировался со следующими официальными документами, которые соответствуют версиям, которые я использую:
- Свойства аварийного переключения подключения AMQP v1. 0а>
- Протокол AMQP v1.0< /а>
- Qpid JMS 0.11.1, который является Реализация JMS, которую я использую
Клиент JMS указывает следующий URI для аварийного переключения и повторной попытки:
String uri = new String("failover:(amqp://host1:5672,amqp://host2:5672)?&failover.maxReconnectAttempts=20");
javax.jms.ConnectionFactory connectionFactory = new org.apache.qpid.jms.JmsConnectionFactory(uri);
Применяется ли failover.maxReconnectAttempts к каждому URI аварийного переключения (т. е. будет повторяться 20 раз для первого URI, и если ему не удастся повторно подключиться, будет предпринята еще 20 попыток для второго URI; для меня предостережение здесь заключается в том, что с максимальное значение повторного подключения по умолчанию, равное -1, клиент будет бесконечно повторять попытки для первого URI, и, следовательно, логика отработки отказа никогда не достигнет второго URI), или это циклический перебор для обоих URI (т. е. повторяет попытку для первого URI один раз , затем второй URI также один раз, затем обратно к первому и т. д., всего 20 попыток)? Я буду тестировать это, конечно, однако, объясняется ли это поведение в официальном стандарте?
Учитывая, что клиент занят отправкой или получением сообщения и возникла проблема с соединением с брокером на хосте 1, будет ли также повторена операция отправки или получения? Я ожидаю, что базовое соединение будет повторено, однако не уверен, что произойдет с операцией отправки или получения. Если отправка/получение не повторяется автоматически, это означает, что на уровне отправки/получения должна быть другая логика повтора (что я считаю очень маловероятным). Как и прежде, задокументировано ли это в официальном стандарте?