SpringCloudStream 配置Binder和Binding

您所在的位置:网站首页 enablebinding SpringCloudStream 配置Binder和Binding

SpringCloudStream 配置Binder和Binding

2023-09-28 12:48| 来源: 网络整理| 查看: 265

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情

配置Binder

SCStream是通过Binder来定义一个外部消息服务器。具体对于RabbitMQ来说,Binder就是一个Exchange的抽象。默认情况下,RabbitMQ的binder使用了SpringBoot的ConnectionFactory,所以,他也支持spring-boot-starter-amqp组件中提供的对RabbitMQ的所有配置信息。这些配置信息在application.properties里都以spring.rabbitmq开头。

而在SCStream框架中,也支持配置多个Binder访问不同的外部消息服务器(例如同时访问kafka和rabbitmq,或者同时访问rabbitmq的多个virtual-host),就可以通过Binder进行定义。配置的方式都是通过spring.cloud.stream.binders.[bindername].environment.[props]=[value]的格式来进行配置。另外,如果配置了多个binder,也可以通过spring.cloud.stream.default-binder属性指定默认的binder。例如

spring.cloud.stream.binders.testbinder.environment.spring.rabbitmq.host=localhost spring.cloud.stream.binders.testbinder.environment.spring.rabbitmq.port=5672 spring.cloud.stream.binders.testbinder.environment.spring.rabbitmq.username=guest spring.cloud.stream.binders.testbinder.environment.spring.rabbitmq.password=guest

这个配置方式就配置了一个名为testbinder的Binder。

配置Binding

Binding是SCStream中实际进行消息交互的桥梁。在RabbitMQ中,一个binding可以对应消费者的一个queue,在发送消息时,也可以直接对应一个exchange。在SCStream中,就是通过将Binding和Binder建立绑定关系,然后客户端就之需要通过Binding来进行实际的消息收发。

在SCStream框架中,配置Binding首先需要进行声明。声明Binding的方式是在应用中通过@EnableBinding注解,向Spring容器中注入一个Binding接口对象。在这个接口中,增加@Input注解指定接收消息的Binding,而通过@Output注解指定发送消息的Binding。在SCStream中,默认提供了Source、Sink、Processor三个接口对象,这三个对象都是简单的接口,可以直接拿来使用,当然也可以配置自己的Binding接口对象。比如Source,他的定义就是这样的:

public interface Source { String OUTPUT = "output"; @Output(Source.OUTPUT) MessageChannel output(); }

通过这个@Output直接,就声明出了一个Binding对象,他的名字就叫做output。对于RabbitMQ,就对应一个queue。SCStream就会将这个output声明为一个消息发送队列。

接下来就可以在应用中使用@EnableBinding(Source.class),声明这个Binding对象。接下来,就可以在Spring应用中使用@Autowired注入,然后通过source.output()方法获取到MesasgeChannel对象,进而发送消息了。

这时,如果不对output这个Binding做任何配置,应用启动后,会在RabbitMQ中声明出一个默认的exchange和queue。但是默认的名字都太奇怪,而且很多细节功能不够好用。所以,通常都会对这个Binding进行配置。配置的方式都是在application.properties中配置。所有配置都是按照spring.cloud.stream.binding.[bindingname].[props]=[value]的格式进行指定。例如:

spring.cloud.stream.bindings.output.destination=scstreamExchange spring.cloud.stream.bindings.output.group=myoutput spring.cloud.stream.bindings.output.binder=testbinder

这样就指定了output这个Binding对应的Exchange。

注意:

如果不希望每个Binding都单独指定Binder,就可以配置默认的Binder。

对于binding,可以指定group所属组的属性。Group这个概念在RabbitMQ中是不存在的,但是SCStream会按照这个group属性,声明一个名为scstreamExchange.myoutput的queue队列,并与scstreamExchange建立绑定关系。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3