Можно ли определить стратегию FIXED BackOff для производителя JMSTemplate - PullRequest
0 голосов
/ 30 мая 2018

Если посредник недоступен / недоступен, производитель Spring JMS должен подождать настраиваемую продолжительность перед повторной попыткой.Можно ли задать конфигурацию, подобную FixedBackOff, в DefaultMessageListenerContainers?

Проблема в том, что я видел, что мой производитель безгранично пытается подключиться к брокеру ActiveMQ, но подключение производителя не имеет допустимой цепочки сертификатов и выдает SSLошибка.Эта повторная попытка подключения выполняется без перерыва и генерирует несколько записей журнала в считанные секунды.Это просто сценарий, когда SSL был неверным, но в производственном процессе брокер отключается для обслуживания, тогда производитель должен ждать между повторными попытками соединения.

Или есть способ проверить состояние соединения JMS Producer перед публикацией сообщений.

Окружающая среда : Spring JMS.ActiveMQ

1 Ответ

0 голосов
/ 31 мая 2018

На DefaultMessageListenerContainer действительно есть опция для настройки:

/**
 * Specify the {@link BackOff} instance to use to compute the interval
 * between recovery attempts. If the {@link BackOffExecution} implementation
 * returns {@link BackOffExecution#STOP}, this listener container will not further
 * attempt to recover.
 * <p>The {@link #setRecoveryInterval(long) recovery interval} is ignored
 * when this property is set.
 * @since 4.1
 */
public void setBackOff(BackOff backOff) {
    this.backOff = backOff;
}

По умолчанию именно эта:

private BackOff backOff = new FixedBackOff(DEFAULT_RECOVERY_INTERVAL,  Long.MAX_VALUE);

Аргумент Long.MAX_VALUE обозначает maxAttempts.

ОБНОВЛЕНИЕ

Если мы говорим о JmsTemplate, то логика повторения должна выполняться с точки зрения клиентского кода.Этот компонент является пассивным , и нет никаких фоновых потоков, выполняющих какую-либо работу, как в случае DefaultMessageListenerContainer.

В целях повторных попыток на основе клиента мы предлагаем проект Spring Retry .Существует RetryTemplate и RetryPolicy для настройки.Затем вы просто вызываете это JmsTemplate с помощью оболочки RetryTemplate.execute() - и любые ошибки будут повторяться в соответствии с политикой.

...