如何使用 spring-cloud-stream-binder-kafka 和 RetryTemplate 启用有状态重



我想知道是否有办法使用spring-cloud-stream-binder-kafka启用有状态的RetryTemplate。

我注意到有一个构造函数

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

通过这段代码进行调试,我注意到布尔值false使用 spring-cloud-stream-binder-kafka 传递到stateful参数中。

相关链接: KafkaMessageDrivenChannelAdapter.java, RetryingMessageListenerAdapter.java

关于这个话题,我有几个问题。

  1. 有没有办法通过 application.yml 或ListenerContainerCustomizerRetryingMessageListenerAdapter的成员stateful设置为 true?
  2. 有没有办法使用弹簧-云-流-绑定器-卡夫卡禁用RetryTemplate?我认为我发现的最接近的是在我的@StreamRetryTemplate中覆盖max-attempts比 1.
  3. 如果我使用的是 spring-kafka 提供的SeekToCurrentErrorHandler,既然SeekToCurrentErrorHandler已经是一种有状态的错误处理机制,我应该stateful设置为 true 有什么好处或理由吗?

请让我知道。

由于SeekToCurrentErrorHandler具有重试和退避功能,因此不再需要有状态重试。

是的,要在绑定器中禁用重试,请设置maxAttempts=1并相应地配置 STCEH。

最新更新