Version: Next
Stream 概述
消息中间件选型问题
- 目前流行的消息队列:
RockerMQ
、RabbitMQ
、Kafka
、ActiveMQ
- 全学了会裂开,此外,可能遇到使用不同 MQ 的项目对接的问题
- Stream:屏蔽底层消息中间件差异,降低切换成本,统一消息的编程模型
Spring Cloud Stream
- 是一个构件消息驱动微服务的框架
- 应用程序通过
inputs
或outputs
与Spring Cloud Stream
中的Binder
对象交互- 通过配置来
绑定 binding
,Spring Cloud Stream 的Binder
对象负责与消息中间件
交互开发者
只需要学会如何与Stream
交互就可以方便使用消息驱动的方式,通过使用 Spring Integration 来连接消息代理中间件以实现消息时间驱动- Spring Cloud Stream 为一些供应商的消息中间件产品提供了个性化的自动化配置实现,引用了
发布-订阅
、消费组
、分区
三个核心概念- 目前仅支持
RabbitMQ
、Kafka
Stream 设计思想
标准MQ
- 生产者、消费者之间依靠
消息
没接传递消息信息Message
- 消息必须走特定的
通道
Message Channel
- 消息通道的消息如何被消费——谁负责
收发处理
- 消息通道
MessageChannel
的子接口SubscribableChannel
,由MessageHandler
消息处理器订阅引入 Spring Cloud
- 具体的消息中间件选型与业务系统耦合,引入 Spring Cloud 后,Stream 提供了一种
解耦
方式- 通过
绑定器 Binder
作为中间层,实现应用程序与消息中间件细节之间的隔离- 通过向应用程序暴露统一的 Channel 通道,使得应用程序不需要考虑各种不同的消息中间件实现
绑定器 Binder
可以做到代码层面对消息中间件的无感知,甚至能基于动态的中间件切换,使微服务开发高度解耦,服务可以更多关注自己的业务流程
- Stream 中的消息通信方式遵循了
发布-订阅
模式,Topic 主题进行广播
RabbitMQ
:就是Exchange
Kafa
:就是Topic
Stream 业务流程与常用注解
Binder
:方便的连接消息中间件,屏蔽差异Channel
:通道,是队列 Queue 的一种抽象,在消息通信系统中就是实现存储与转发的媒介,通过 Channel 对队列进行配置Source
&Sink
:可简单理解为Stream
自身,从Stream
发布消息就是输出,接收消息就是输入
常用注解
注解 | 解释 |
---|---|
@Input | 注解标识输入通道,通过该输入通道接收到的消息进入应用程序 |
@Output | 注解标识输出通道,发布的消息将通过该通道离开应用程序 |
@StreamListener | 监听队列,用于消费者队列消息接收 |
@EnableBinding | 指通道 channel 与 Exchange / Topic 绑定在一起 |