Spring Cloud Stream 笔记
参考:官方文档中文版!Spring Cloud Stream 快速入门 - 邴越 - 博客园 (cnblogs.com)
提供了kafka rabbitmq等消息中间件的个性化配置 引入了发布订阅 消费组 和分区的语义概念,有效的简化了上层研发人员使用MQ的复杂度,让开发更多的精力投入到核心业务的处理
在实际开发过程中,spring cloud Stream 整合消息中间件 可以降低系统和中间件的耦合性
解决了什么问题
无感知的使用消息中间件
中间件和服务的高度解耦
核心概念和应用模型
应用模型
Spring Cloud Stream 会注入输入和输出的channels 应用程序通过这些channels与外界通信,
而channels则是通过一个明确的中间件Binders与外部brokers连接
各大消息中间件的绑定抽象
提供对kafka rabbitmq redis gemfire的绑定实现(依赖见链接)
分区支持
spring cloud stream 支持在一个应用程序的多个实例之间数据分区 在分区的情况下,物理通信介质
(比如 topic代理)被视为多分区结构 一个或多个生产者应用程序实例将数据发送给多个消费应用实例,
并保证共同的特性的数据由相同的消费者实例处理。
编程模型
@EnableBinding //增加消息通道的监听功能
spring 应用 ---》 spring cloud stream
@Input 与 @Output
@StreamListener //监听消息队列的消息
具体实现:见链接
https://zhuanlan.zhihu.com/p/105296634
消息分组
生产者发出一个消息 到绑定通道 这条消息会产生多个副本被每个消费者实例接收和处理
保证消息只被 消费一次 避免了消息重复消费
消费者分组后,同一个组中只允许一个消费者消费消息
消息分区
Stream的分区是当消息的提供者发送了相同的消息的时候,如果被集群的中的某个节点消费了那么如果提供者在此发送相同的消息的时候 ,一致会被同一个的消费者消费掉
同一个特征的数据被同一个实例消费
可以自定义分区策略
具体实现:SpringCloud进阶:消息驱动之Spring Cloud Stream 消息分区 - 知乎 (zhihu.com)