🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
**消息中间件:** :-: ![](https://img.kancloud.cn/9b/5d/9b5d8001143d1c93ebff0795b7b4baa9_439x153.jpg) 消息传递模式 消息中间件ActiveMQ、RabbitMQ、SocketMQ、Kafka进行消息传递时一般遵循上图的模式: (1)生产者与消费者之间靠消息媒介 Message 传递信息内容; (2)消息必须走特定的通道MessageChannel; (3)消息通道MessageChannel的子接口SubscribeChannel负责发消息,由MessageHandler消息处理器消费消息。 <br/> **为什么用Cloud Stream:** 比方说我们用到了RabbitMQ和Kafka,由于这两个消息中间件在架构上的不同,像RabbitMQ有exchange,kafka有Topic和Partitions分区。 :-: ![](https://img.kancloud.cn/43/ae/43aed59b6c1b6bd302072f9dbfb57b13_592x237.jpg) 这些中间件的差异性导致我们实际项目开发给我们造成了一定的困扰,我们如果用了两个消息队列的其中一种,后面的业务需求,我想往另外一种消息队列进行迁移,这时候无疑就是—个灾难性的,<mark>一大堆东西都要重新推倒重新做</mark>,因为它跟我们的系统耦合了,这时候Spring Cloud Stream给我们提供了—种解耦合的方式。 <br/> **Stream凭什么可以统一底层差异:** 在没有绑定器这个概念的情况下,我们的SpringBoot应用要直接与消息中间件进行信息交互的时候,由于各消息中间件构建的初衷不同,它们的实现细节上会有较大的差异性通过定义绑定器作为中间层,完美地实现了<mark>应用程序与消息中间件细节之间的隔离</mark>。通过向应用程序暴露统一的Channel通道,使得应用程序不需要再考虑各种不同的消息中间件实现。 <mark>通过定义绑定器Binder作为中间层,实现了应用程序与消息中间件细节之间的隔离</mark>。 <br/> **Binder绑定器:** 在没有绑定器这个概念的情况下,我们的SpringBoot应用要直接与消息中间件进行信息交互的时候,由于各消息中间件构建的初衷不同,它们的实现细节上会有较大的差异性,通过定义绑定器作为中间层,完美地实现了<mark>应用程序与消息中间件细节之间的隔离</mark>。Stream对消息中间件的进一步封装,可以做到代码层面对中间件的无感知,甚至于动态的切换中间什(rabbitmq切换为kafka),使得微服务开发的高度解耦,服务可以关注更多自己的业务流程。 :-: ![](https://img.kancloud.cn/ea/46/ea4693cfd04ed4578c50c3df1a8e764e_594x338.jpg) <mark>通过定义绑定器Binder作为中间件,实现了应用程序与消息中间件细节之间的隔离</mark> ![](https://img.kancloud.cn/d4/9a/d49a09c94de360da95d3ed2acc58163f_964x181.jpg)