Spring Cloud,这个全家桶框架在整个中小型互联网公司异常的火爆,那么相对应着,Spring Cloud Stream 就渐渐的被大家所重视起来,这里我们主要介绍下Spring Cloud Stream 如何与RabbitMQ进行集成。
SpringCloudStream 简介
SpringCloudStream 就是使用了基于消息系统的微服务处理架构。对于消息系统而言一共分为两类:基于应用标准的 JMS、基于协议标准的 AMQP,在整个 SpringCloud 之中支持有 RabbitMQ、Kafka 组件的消息系统。利用 SpringCloudStream 可以实现更加方便的消息系统的整合处理,但是推荐还是基于 RabbitMQ 实现会更好一些。
为什么 SpringCloud 中要提供有一个类似于消息驱动的 SpringCloudStream 呢?
如果通过 Java 历史上的分布式的开发架构大家不难发现,对于消息系统,实际上最初的 SUN 公司是非常看中的,所以在 EJB 的时代里面专门提供有消息驱动 Bean(Message Driven Bean、MDB)利用消息驱动 Bean 可以进行消息的处理操作。利用消息驱动 bean 的模式可以简化用户的操作复杂度,直接传递一些各类的数据即可实现业务的处理操作。
于是在 SpringBoot 的之中为了方便开发者去整合消息组件,也提供有一系列的处理支持,但是如果按照这些方式来在 SpringCloud 之中进行消息处理,有些人会认为比较麻烦,所以在 SpringCloud 里面将消息整合的处理操作进行了进一步的抽象操作, 实现了更加简化的消息处理。
总结:SpringCloudStream 就是实现了 MDB 功能,同时可以更加简化方便的整合消息组件。
说明:最底层是消息服务,中间层是绑定层,绑定层和底层的消息服务进行绑定,顶层是消息生产者和消息消费者,顶层可以向绑定层生产消息和和获取消息消费
- Barista接口:Barista接口是定义来作为后面类的参数,这一接口定义通道类型和通道名称,
通道名称
是作为配置用
,通道类型
则决定
了app会使用这一通道进行发送消息
还是从中接收消息
。 - @Output: 输出注解,用于定义发送消息接口
- @Input: 输入注解,用于定义消息的消费者接口
- @StreamListener: 用于定义监听方法的注解
使用Spring Cloud Stream 非常简单,只需要使用好3个注解即可,在实现高性能消息的生成和消费场景非常合适,但是使用Spring Cloud Stream框架有一个非常大的问题就是不能实现可靠性投递
,也就是没法保证消息的100%可靠性,会存在少量消息丢失
问题。
这个原因是因为SpringCloudStream框架为了和Kafka兼顾
所有在实际工作中使用它的目的就是针对高性能的消息通信
的!这点就是在当前版本SpringCloudStream的定位。
详细借鉴:https://www.cnblogs.com/leeSmall/p/8900518.html