Java spring cloud stream rabbit的退避设置

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

我仍在使用rabbitmq和spring云消息传递建立一个示例消息传递系统,但遇到了一个bug(?),或者我误解了文档。(已使用spring boot版本2.0.3.发行版)

在本例中,我需要以下设置

  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启动的一项功能