Spring cloud stream 3.1 rabbitmq踩坑记录

137 阅读1分钟

新版spring cloud stream文档

新版提倡用函数式进行发送和消费信息

定义返回类型为Supplier, Function or Consumer的bean提供消息发送和消费的bean

单个消费者不自动创建用function

spring:
  cloud:
    function:
      definition: consumerEvent

绑定名称命名规则

input - + -in- +
output - + -out- +
在配置文件中指定spring.cloud.function.definition的名称后会把这个bean绑定到对应的消费者和提供者上.

如下定义 会把bean绑定在消费者consumerEvent-in-0或者提供者consumerEvent-out-0上

多个bean可以用;进行分割(一定注意;分割)

列子

cloud:
 stream:
   default-binder: cogoMq
   rabbit: #多集群的情况下仍然需要配置在该目录下
     bindings:
       fundEnterResult-in-0:
         fundEnterResult:
           acknowledgeMode: manual
       tradeRiskAuditResult-in-0:
         tradeRiskAuditResult:
           acknowledgeMode: manual
       vaStatusChange-out-0:
         producer:
           bindQueue: false
           exchangeType: direct
           declareExchange: false
           exchangeAutoDelete: false
           queueNameGroupOnly: true
   bindings:
     fundEnterResult-in-0:
       destination: demo #交换器名称
       group: test #队列名称
       binder: cogoMq #绑定器
     tradeRiskAuditResult-in-0:
       destination: demo1 #交换器名称
       group: test1 #队列名称
       binder: cogoMq #绑定器
     vaStatusChange-out-0:
       destination: demo2 #交换器名称
       group: test2 #队列名称
   binders:
     cogoMq:
       type: rabbit
       environment: #可用于自定义绑定器环境的一组属性,设置这个属性后,可以实现Binder组件和应用组件的隔离 默认值:空
         spring:
           rabbitmq:
             host: ****
             port: ****
             username: ****
             password: ****
             publisher-confirm-type: correlated
             publisher-returns: true
             virtual-host: /
             ssl:
               enabled: false
 function:
   definition: fundEnterResult;tradeRiskAuditResult

1.jar包里的注释用的|(分割)
> /**
>  * Definition of the function to be used. This could be function name (e.g., 'myFunction')
>  * or function composition definition (e.g., 'myFunction|yourFunction')
>  */
> private String definition;

2.官方文档里的说明也是

and modify the `spring.cloud.function.definition` property to reflect your intention to compose a new function from both ‘toUpperCase’ and ‘wrapInQuotes’. To do so Spring Cloud Function relies on `|` (pipe) symbol. So, to finish our example our property will now look like this:
--spring.cloud.function.definition=toUpperCase|wrapInQuotes

spring cloud 2020 默认不使用bootstrap启动 要加这个依赖spring-cloud-starter-bootstrap

```

api('org.springframework.cloud:spring-cloud-starter-bootstrap')