Java spring cloud stream rabbit的退避设置
我仍在使用rabbitmq和spring云消息传递建立一个示例消息传递系统,但遇到了一个bug(?),或者我误解了文档。(已使用spring boot版本2.0.3.发行版) 在本例中,我需要以下设置Java spring cloud stream rabbit的退避设置,java,spring,spring-boot,spring-rabbit,spring-messaging,Java,Spring,Spring Boot,Spring Rabbit,Spring Messaging,我仍在使用rabbitmq和spring云消息传递建立一个示例消息传递系统,但遇到了一个bug(?),或者我误解了文档。(已使用spring boot版本2.0.3.发行版) 在本例中,我需要以下设置 spring: cloud: stream: rabbit: bindings: foo: consumer: auto-bind-dlq: true
spring:
cloud:
stream:
rabbit:
bindings:
foo:
consumer:
auto-bind-dlq: true
instanceCount: 2
instanceIndex: 0
bindings:
foo:
destination: foo
group: fooGroup
consumer:
maxAttempts: 4
backOffInitialInterval: 10000
backOffMultiplier: 10.0
fooChannel:
destination: foo
这个问题的有趣部分是spring.cloud.stream.bindings.foo.consumer
part,其中我设置了4次最大尝试,初始退避间隔为10秒,乘数为10
将应用最大尝试次数和初始间隔,但不会应用乘数。根据文档(和),键是驼峰式的,但是backOffInitialInterval
在应用时也像backOffInitialInterval
一样工作。我对钥匙的不同包装方式有点困惑,但那是另一回事了
我已经尝试了各种可能的编写回退乘数
,但没有得到应用,消息每10秒发送一次
现在,为了测试真正的错误,我设置了一个@Bean
,并手动配置了RetryTemplate
@Bean
RetryTemplate retryTemplate() {
RetryTemplate r = new RetryTemplate();
ExponentialBackOffPolicy exponentialBackOffPolicy = new ExponentialBackOffPolicy();
exponentialBackOffPolicy.setInitialInterval(10000);
exponentialBackOffPolicy.setMultiplier(10.0);
exponentialBackOffPolicy.setMaxInterval(100000);
r.setBackOffPolicy(exponentialBackOffPolicy);
SimpleRetryPolicy simpleRetryPolicy = new SimpleRetryPolicy();
simpleRetryPolicy.setMaxAttempts(4);
r.setRetryPolicy(simpleRetryPolicy);
return r;
}
使用bean,所有内容都得到正确应用,所有设置都得到尊重
是我在application.yml中设置了错误的配置道具,还是问题出在哪里 spring retry
ExponentialBackOfPolicy
有一个计算间隔的上限,由maxInterval
定义
SpringCloudStream将此作为属性公开
巧合的是,默认值为10秒
您也需要设置该属性。我看到您在@Bean
版本中这样做
我对钥匙的不同包装方式有点困惑,但那是另一回事了
当然,Java*Properties
类上的属性名是大小写的
将属性名称从backoff max interval
转换为backOffMaxInterval
是Spring启动的一项功能