Spring Cloud Stream(消息驱动)
官网结构图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B4RSkLHu-1629185440989)(C:\Users\rlb\AppData\Roaming\Typora\typora-user-images\image-20210812224707690.png)]
组成 | 说明 |
---|---|
Middleware | 中间件,目前只支持RabbitMQ 和Kafka |
Binder | Binder是应用与消息中间件的封装,目前只支持RabbitMQ 和Kafka,通过Binder可以很方便的链接消息中间件,可以动态的该表消息类型(Kafka 的Topic 或者RabbitMQ 的ExChange)这些都可以通过配置来实现 |
@Input | 注解标识输入,通过该注解可以将消息发布到应用程序 |
@Output | 注解标识输出,通过该注解可以将发布到应用程序的消息离开 |
@StreamListener | 监听队列,用于消费者的队列的消息接收 |
@EnableBinding | 指通道channel和exChange 进行绑定 |
是什么?
官方定义:Spring Cloud Stream 是一个构建消息驱动的框架(类似于java 的jdbc)
Spring Cloud Stream 通过inputs ,outputs 和Binder进行交互 ,通过我们配置来binding ,而Spring Cloud Stream 的binder 负责与消息中间件进行交互,所以我们只需要搞清楚怎么和Spring Cloud Stream 进行交互即可
可以干什么?
在环境不同消息中间件不同的情况下可以做到无感知动态切换,因为Spring Cloud Stream 的Binder对消息中间件做了封装,使得微服务开发的高度解耦,我们可以更加关注业务的开发,减少程序员学习的难度。
Spring Cloud Stream 标准流程图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4aGtvQc7-1629185440992)(image-20210816161720275.png)]
模拟上图流程完成代码的实现
服务端:
//pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>