我想知道是否有办法使用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
关于这个话题,我有几个问题。
- 有没有办法通过 application.yml 或
ListenerContainerCustomizer
将RetryingMessageListenerAdapter
的成员stateful
设置为 true? - 有没有办法使用弹簧-云-流-绑定器-卡夫卡禁用
RetryTemplate
?我认为我发现的最接近的是在我的@StreamRetryTemplate
中覆盖max-attempts
比 1. - 如果我使用的是 spring-kafka 提供的
SeekToCurrentErrorHandler
,既然SeekToCurrentErrorHandler
已经是一种有状态的错误处理机制,我应该stateful
设置为 true 有什么好处或理由吗?
请让我知道。
由于SeekToCurrentErrorHandler
具有重试和退避功能,因此不再需要有状态重试。
是的,要在绑定器中禁用重试,请设置maxAttempts=1
并相应地配置 STCEH。