当前位置: > > > 消息驱动微服务框架Spring Cloud Stream使用详解6(多绑定器配置)

消息驱动微服务框架Spring Cloud Stream使用详解6(多绑定器配置)

六、多绑定器配置

1,单绑定器配置

(1)我们知道 Spring Cloud Stream 中默认实现了对 RabbitMQKafka 的绑定器,从而实现了将应用程序逻辑上的输入输出通道连接到物理上的消息中间件。
(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 的配置
(2)当采用显示配置方式时会自动禁用默认的绑定器配置,所以当定义了显示配置别名后,对于这些绑定器的配置需要通过 spring.cloud.stream.binders.<configurationName> 属性来进行设置。对于绑定器的配置主要有如下 4 个参数:
  • spring.cloud.stream.binders.<configurationName>.type:指定绑定器类型,可以是 rabbitkafka 或者其他自定义绑定器的标识名。
  • 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
评论0