Как включить Stateful Retry с помощью spring-cloud-stream-binder-kafka и RetryTemplate?

Мне интересно, есть ли способ включить Stateful RetryTemplate с помощью spring-cloud-stream-binder-kafka.

Заметил что есть конструктор

RetryingMessageListenerAdapter(MessageListener<K, V> messageListener, RetryTemplate retryTemplate, RecoveryCallback<? extends Object> recoveryCallback, boolean stateful)

Отлаживая этот код, я заметил, что логическое значение false передается в параметр stateful с помощью spring-cloud-stream-binder-kafka.

Ссылки по теме: KafkaMessageDrivenChannelAdapter.java, RetryingMessageListenerAdapter.java

У меня есть несколько вопросов по этой теме.

  1. Есть ли способ установить для RetryingMessageListenerAdapter члена stateful значение true через application.yml или ListenerContainerCustomizer?
  2. Есть ли способ отключить RetryTemplate с помощью spring-cloud-stream-binder-kafka? Думаю, самое близкое, что я нашел, - это переопределить max-attempts на 1 в моем @StreamRetryTemplate.
  3. Если я использую SeekToCurrentErrorHandler, предоставленный spring-kafka, есть ли какие-либо преимущества или причины, по которым я должен установить stateful как true, поскольку SeekToCurrentErrorHandler уже является механизмом обработки ошибок с отслеживанием состояния?

Пожалуйста, дай мне знать.




Ответы (1)


Теперь повторная попытка с отслеживанием состояния больше не требуется, поскольку SeekToCurrentErrorHandler имеет возможности повторной попытки и отсрочки.

Да, чтобы отключить повторную попытку в подшивке, установите maxAttempts=1 и соответствующим образом настройте STCEH.

person Gary Russell    schedule 18.05.2020