На 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()
- и любые ошибки будут повторяться в соответствии с политикой.