Spring Cloud Stream 简介java
Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力的框架。它能够基于Spring Boot 来建立独立的,可用于生产的Spring 应用程序。他经过使用Spring Integration来链接消息代理中间件以实现消息事件驱动。Spring Cloud Stream 为一些供应商的消息中间件产品提供了个性化的自动化配置实现,引用了发布-订阅、消费组、分区的三个核心概念。Spring Cloud Stream目前仅支持RabbitMQ、Kafka。编程
须要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码 一零三八七七四六二六框架
原理简介分布式
如图是Stream源码的流程图。微服务
Stream首先会动态注册相关BeanDefinition,而且处理@StreamListener注解;而后在Bean实例初始化以后,会调用BindingService进行服务绑定;BindingService在绑定服务时会首先获取特定的Binder绑定器,而后绑定Producer和Consumer;最后Stream的相关实例就会进行发送和接受消息的处理。代理
编程模型cdn
Binder中间件
Binder 是 Spring Cloud Stream 的一个抽象概念,是应用与消息中间件之间的粘合剂。 目前 Spring Cloud Stream 实现了 Kafka 和 Rabbit MQ 的binder。经过 binder ,能够很方便的链接中间件,能够动态的改变消息的destinations(对应于 Kafka 的topic,Rabbit MQ 的 exchanges),这些均可以经过外部配置项来作到。甚至能够任意的改变中间件的类型而不须要修改一行代码。blog
Publish-Subscribe事件
消息的发布(Publish)和订阅(Subscribe)是事件驱动的经典模式。Spring Cloud Stream 的数据交互也是基于这个思想。生产者把消息经过某个 topic 广播出去(Spring Cloud Stream 中的 destinations)。其余的微服务,经过订阅特定 topic 来获取广播出来的消息来触发业务的进行。
这种模式,极大的下降了生产者与消费者之间的耦合。即便有新的应用的引入,也不须要破坏当前系统的总体结构。
Consumer Groups
“Group”, Kafka 中的概念。Spring Cloud Stream 的这个分组概念的意思基本和 Kafka 一致。
微服务中动态的缩放同一个应用的数量以此来达到更高的处理能力是很是必须的。对于这种状况,同一个事件防止被重复消费,只要把这些应用放置于同一个 “group” 中,就可以保证消息只会被其中一个应用消费一次。
Spring Cloud Stream提供了一系列的预先定义的注解来声明输入型和输出型channel,业务系统基于这些channel与消息中间件进行通讯,而不是直接与消息中间件进行通讯。 java B2B2C Springcloud电子商城系统