我困惑是:
我的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.在这种情况下,容器工厂中仍然有重试模板是否有意义?
- retry(在容器工厂中设置)实际上是做什么的,在我的例子中,它只是对第三方应用程序进行重试吗?
1.由于我已经使用Web客户端调用第三方API,并且最大尝试次数设置为3,在这种情况下,我的总重试次数是否为6?3次来自容器工厂中的简单重试策略,3次来自Web客户端?
1.我还看到一些博客说,容器工厂中设置的简单重试策略也会不断重试主题,我们这里有什么样的用例?
到目前为止,我有简单的重试策略(设置为3)和Web客户端重试尝试设置为3。想知道它如何内部工作。
1条答案
按热度按时间yeotifhr1#
这完全取决于你的听众在做什么。
容器级别的重试适用于整个侦听器。如果您不只是HTTP调用,那么您将无法一对一地替换此重试,而不是被动的重试。
如果两者都有,则不是
6
:容器中的每一次尝试都会产生Web客户端的所有尝试,直到控制返回容器进行下一次尝试。因此,合起来就是9
。RetryTempalate
支持在最近的版本中已被弃用。请考虑使用相应的DefaultErrorHandler
或以下版本:https://docs.spring.io/spring-kafka/docs/current/reference/html/#retrying-deliveries