Gab*_*man 5 spring-retry spring-cloud-stream spring-cloud-stream-binder-kafka
我有一个使用 Kafka binder 的 Spring Cloud Stream 项目,我正在尝试理解并最终自定义 Cloud Stream 使用的 RetryTemplate。
我没有找到很多关于它是如何工作的文档,但是我所阅读的内容使我得出以下假设:
@StreamListener都会触发 Spring Retry这些假设正确吗?
现在,在我的应用程序中,我有一个模式,其中一些消息可以立即处理,但其他消息必须推迟到以后再次尝试(使用指数退避等)。
我应该抛出异常导致 Spring Cloud Stream 在绑定层重试这些消息,还是自己实现重试并跟踪我自己的重试上下文?
如果我应该依赖 Cloud Stream 的重试设置,我应该如何自定义退避策略等?
默认重试配置为3 次尝试、1 秒初始延迟、2.0 乘数、最大延迟 10 秒。
默认情况下使用无状态重试,这意味着重试在内存中。
a 返回的所有记录的所有重试的总延迟poll()不得超过max.poll.interval.ms。
使用适用于 Apache Kafka 的 Spring 的现代版本(由绑定器使用);最好禁用活页夹重试 ( maxAttempts=1) 并使用SeekToCurrentErrorHandler具有适当BackOff配置的 a。
ListenerContainerCustomizer<AbstractMessageListenerContainer<?, ?>> @Bean您可以使用with设置错误处理程序return (container, dest, grp) -> container.setErrorHandler(handler)。
这样就避免了上面提到的问题,并且只有一条记录的最大延迟间隔必须小于max.poll.interval.ms。
您还可以对哪些异常是可重试的、哪些异常不可重试进行分类,以及配置在重试用尽后调用的死信恢复器。
请参阅参考文档。
| 归档时间: |
|
| 查看次数: |
2679 次 |
| 最近记录: |