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

问题描述 投票:0回答:1

我想知道是否有一种方法可以使用spring-cloud-stream-binder-kafka启用有状态RetryTemplate。

我注意到有一个构造函数

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

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

相关链接:KafkaMessageDrivenChannelAdapter.javaRetryingMessageListenerAdapter.java

我对此主题有几个问题。

  1. 是否可以通过application.yml或RetryingMessageListenerAdapterstateful的成员ListenerContainerCustomizer设置为true?
  2. 是否有一种使用spring-cloud-stream-binder-kafka禁用RetryTemplate的方法?我认为我找到的最接近的是将max-attempts中的@StreamRetryTemplate覆盖为1。
  3. 如果我使用spring-kafka提供的SeekToCurrentErrorHandler,由于stateful已经是有状态的错误处理机制,我应该将SeekToCurrentErrorHandler设置为true有什么好处或原因?

请让我知道。

spring-boot spring-kafka spring-cloud-stream spring-retry spring-cloud-stream-binder-kafka
1个回答
1
投票

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

是,要在活页夹中禁用重试,请设置maxAttempts=1并适当配置STCEH。

© www.soinside.com 2019 - 2024. All rights reserved.