简介
SpringCloud Stream是一个用来为微服务应用构建消息驱动能力的框架。通过使用SpringCloud Stream,可以有效简化开发人员对消息中间件的使用复杂度,让开发人员有更多的精力来关注核心业务。SpringCloud Stream只支持RabbitMq和Kafka这两个消息中间件的配置
代码演示
-
引入依赖
依赖 -
创建用于接收来自RabbitMq消息的消费者类SinkReceiver
SinkReceiver
在上面的例子中,我们通过@EnableBinding(Sink.class)绑定了sink接口,该接口是SpringCloud Stream中默认实现的对输入消息通道的绑定,它的源码实现如下: 源码实现
另外,@StreamListener注解作用是将被修饰的方法注册为消息中间件上数据流的事件监听器,通过该注解将receive方法注册为消息通道的监听处理器,当RabbitMq发布消息的时候,receive方法会做出对应的响应动作
核心概念
- SpringCloud流式微服务模型
- Binder抽象消息中间件
- 持续发布/订阅支持
- 支持消费者组
- 支持消费分区
- 可插拔的Binder API
流式微服务模型
一个SpringCloud Stream应用以消息中间件为核心,应用通过SpringCloud Stream注入的输入/输出通道与外部进行通信,channels通过特定的binder实现与外部消息中间件通信,架构图如下所示: 架构图对消息中间件的抽象
Binder是SpringCloud Stream的一个抽象概念,是应用与消息中间件的粘合剂。SpringCloud Stream提供了对kafka和RabbitMq的抽象Binder来代表消息中间件,抽象的Binder为灵活配置如何连接消息中间件及发送消息提供了良好的支持。
持续发布订阅支持
流式微服务应用之间通过发布/订阅模型通信,通过共享的topic来传播数据。 发布订阅模型示意图生产者把消息通过某个topic广播出去,其他微服务通过订阅topic来获取广播出来的消息触发业务
消费者组
发布订阅模型让应用之间通过共享topic通信变得相当容易,不过在为高可用部署多个实例时,需要防止应用对该topic中的消息重复消费,一条消息应该只能被一个消费者消费。SpringCloud Stream通过消费者组来实现上述需求,保证消息只被组中的一个消费者消费
分区支持
SpringCloud Stream为多个生产者实例的应用提供消息分区的支持。一个或多个生产者发送数据到多个消费者,把那个保证某个数据仅被某一个消费者实例消费。
分区模型示意图
网友评论