Spring Boot KafkaListenerContainerFactory中的retry实际上是做什么的?

niknxzdl  于 2022-12-12  发布在  Spring
关注(0)|答案(1)|浏览(154)

我困惑是:
我的Kafka Listener Container Factory有一个重试模板,我在其中使用了简单的重试策略。我的Consumer Kafka应用程序基本上是侦听一个主题,然后向第三方发出API调用,以发送它侦听到的事件。在调用第三方API时,我使用了web客户端,将RetryBackoffSpec作为最大尝试次数设置为3。所以从技术上讲,当调用第三方API时,我的WebClient调用将进行3次重试尝试。

@Bean
public KafkaListenerContainerFactory kafkaListenerContainerFactory() {
   ConcurrentKafkaListenerContainerFactory factory = new ConcurrentKafkaListenerContainerFactory();
   factory.setConsumerFactory();
   factory.setErrorHandler();
   factory.setRetryTemplate();
   return factory;
}

1.在这种情况下,容器工厂中仍然有重试模板是否有意义?

  1. retry(在容器工厂中设置)实际上是做什么的,在我的例子中,它只是对第三方应用程序进行重试吗?
    1.由于我已经使用Web客户端调用第三方API,并且最大尝试次数设置为3,在这种情况下,我的总重试次数是否为6?3次来自容器工厂中的简单重试策略,3次来自Web客户端?
    1.我还看到一些博客说,容器工厂中设置的简单重试策略也会不断重试主题,我们这里有什么样的用例?
    到目前为止,我有简单的重试策略(设置为3)和Web客户端重试尝试设置为3。想知道它如何内部工作。
yeotifhr

yeotifhr1#

这完全取决于你的听众在做什么。
容器级别的重试适用于整个侦听器。如果您不只是HTTP调用,那么您将无法一对一地替换此重试,而不是被动的重试。
如果两者都有,则不是6:容器中的每一次尝试都会产生Web客户端的所有尝试,直到控制返回容器进行下一次尝试。因此,合起来就是9
RetryTempalate支持在最近的版本中已被弃用。请考虑使用相应的DefaultErrorHandler或以下版本:https://docs.spring.io/spring-kafka/docs/current/reference/html/#retrying-deliveries

相关问题