Why?
在实际开发过程中,服务与服务之间通信经常会使用到消息中间件,而以往使用了哪个中间件比如RabbitMQ,那么该中间件和系统的耦合性就会非常高,如果我们要替换为Kafka那么变动会比较大,这时我们可以使用SpringCloudStream来整合我们的消息中间件,来降低系统和中间件的耦合性。可以做到代码层面对中间件的无感知,甚至于动态的切换中间件(rabbitmq切换为kafka),使得微服务开发的高度解耦,服务可以关注更多自己的业务流程。
What?
本质:
Spring Cloud Stream是一套轻量级的消息驱动的微服务框架。可以有效简化开发人员对消息中间件的使用复杂度。
原理:
结构图:
- Middleware 中间件,目前只支持RabbitMQ和Kafka
- Binder Binder是应用与消息中间件之间的封装,目前实行了Kafka和RabbitMQ的Binder,通过Binder可以很方便的连接中间件,可以动态的改变消息类型(对应于Kafka的topic,RabbitMQ的exchange),这些都可以通过配置文件来实现
- @Input 注解标识输入通道,通过该输入通道接收到的消息进入应用程序
- @Output 注解标识输出通道,发布的消息将通过该通道离开应用程序
- @StreamListener 监听队列,用于消费者的队列的消息接收
- @EnableBinding 指信道channel和exchange绑定在一起