消息驱动微服务框架Spring Cloud Stream使用详解6(多绑定器配置)
六、多绑定器配置
1,单绑定器配置
(1)我们知道 Spring Cloud Stream 中默认实现了对 RabbitMQ、Kafka 的绑定器,从而实现了将应用程序逻辑上的输入输出通道连接到物理上的消息中间件。
(2)而引入绑定器的方法比较简单,只需在 pom.xml 中增加对应消息中间件的绑定器依赖即可:
- 比如要使用 RabbitMQ 则引入如下依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId> </dependency>
- 如果使用 Kafka 则引入如下依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-kafka</artifactId> </dependency>
2,多绑定器配置
(1)如果我们在一个应用使用多个绑定器时(上面两个依赖都添加),Spring Cloud Stream 在为消息通道做绑定操作时,无法判断应用使用哪个具体的绑定器,就会启动报错。
(2)此时我们需要为每个输入或输出通道指定具体的绑定器:
- 我们可以通过设置默认绑定器来为大部分的通道设置绑定器。比如下面使用 RabbitMQ 作为默认绑定器。
- 而其他一些少数的消息通道单独设置绑定器。比如下面指定 log_output 和 log_input 这个两个通道使用 Kafka。
spring.cloud.stream.default-binder=rabbit spring.cloud.stream.bindings.log_output.binder=kafka spring.cloud.stream.bindings.log_input.binder=kafka
3,同一类型不同环境绑定器配置
当需要在一个应用中使用同一类型不同环境的绑定器时,我们也可以通过配置轻松实现通道绑定。比如,当需要连接两个不同的 RabbitMQ 实例的时候,可以参照如下配置:
(1)下面样例对于输入输出通道指定的绑定器采用了显示别名的配置方式:
- message_output 和 message_input 通道的绑定指定了名为 rabbit1 的配置
- log_output 和 log_output 通道的绑定指定了名为 rabbit2 的配置
- 除此之外其他所有通道的绑定都默认使用名为 rabbit1 的配置
- spring.cloud.stream.binders.<configurationName>.type:指定绑定器类型,可以是 rabbit、 kafka 或者其他自定义绑定器的标识名。
- spring.cloud.stream.binders.<configurationName>.environment:可以直接用来设置各绑定器的属性,默认为空。
- spring.cloud.stream.binders.<configurationName>.inheritEnvironment:用来配置当前绑定器是否继承应用程序自身的环境配置,默认为 true
- spring.cloud.stream.binders.<configurationName>.defaultCandidata:用来设置当前绑定器配置是否被视为默认绑定器的候选项,默认为 true,表示当前配置影响默认配置。当需要让当前配置不影响默认配置时,可以将该属性设置为 false。
spring.cloud.stream.default-binder=rabbit1 spring.cloud.stream.bindings.message_output.binder=rabbit1 spring.cloud.stream.bindings.message_input.binder=rabbit1 spring.cloud.stream.bindings.log_output.binder=rabbit2 spring.cloud.stream.bindings.log_input.binder=rabbit2 spring.cloud.stream.binders.rabbit1.type=rabbit spring.cloud.stream.binders.rabbit1.environment.spring.rabbitmq.host=192.168.60.101 spring.cloud.stream.binders.rabbit1.environment.spring.rabbitmq.port=5672 spring.cloud.stream.binders.rabbit1.environment.spring.rabbitmq.username=hangge spring.cloud.stream.binders.rabbit1.environment.spring.rabbitmq.password=123 spring.cloud.stream.binders.rabbit2.type=rabbit spring.cloud.stream.binders.rabbit2.environment.spring.rabbitmq.host=192.168.60.102 spring.cloud.stream.binders.rabbit2.environment.spring.rabbitmq.port=5672 spring.cloud.stream.binders.rabbit2.environment.spring.rabbitmq.username=hangge spring.cloud.stream.binders.rabbit2.environment.spring.rabbitmq.password=123