Spring Cloud,這個全家桶框架在整個中小型互聯(lián)網(wǎng)公司異常的火爆,那么相對應(yīng)著,Spring Cloud Stream 就漸漸的被大家所重視起來,這里我們主要介紹下Spring Cloud Stream 如何與RabbitMQ進行集成。
SpringCloudStream 簡介
SpringCloudStream 就是使用了基于消息系統(tǒng)的微服務(wù)處理架構(gòu)。對于消息系統(tǒng)而言一共分為兩類:基于應(yīng)用標準的 JMS、基于協(xié)議標準的 AMQP,在整個 SpringCloud 之中支持有 RabbitMQ、Kafka 組件的消息系統(tǒng)。利用 SpringCloudStream 可以實現(xiàn)更加方便的消息系統(tǒng)的整合處理,但是推薦還是基于 RabbitMQ 實現(xiàn)會更好一些。
為什么 SpringCloud 中要提供有一個類似于消息驅(qū)動的 SpringCloudStream 呢?
如果通過 Java 歷史上的分布式的開發(fā)架構(gòu)大家不難發(fā)現(xiàn),對于消息系統(tǒng),實際上最初的 SUN 公司是非常看中的,所以在 EJB 的時代里面專門提供有消息驅(qū)動 Bean(Message Driven Bean、MDB)利用消息驅(qū)動 Bean 可以進行消息的處理操作。利用消息驅(qū)動 bean 的模式可以簡化用戶的操作復(fù)雜度,直接傳遞一些各類的數(shù)據(jù)即可實現(xiàn)業(yè)務(wù)的處理操作。
于是在 SpringBoot 的之中為了方便開發(fā)者去整合消息組件,也提供有一系列的處理支持,但是如果按照這些方式來在 SpringCloud 之中進行消息處理,有些人會認為比較麻煩,所以在 SpringCloud 里面將消息整合的處理操作進行了進一步的抽象操作, 實現(xiàn)了更加簡化的消息處理。
總結(jié):SpringCloudStream 就是實現(xiàn)了 MDB 功能,同時可以更加簡化方便的整合消息組件。
說明:最底層是消息服務(wù),中間層是綁定層,綁定層和底層的消息服務(wù)進行綁定,頂層是消息生產(chǎn)者和消息消費者,頂層可以向綁定層生產(chǎn)消息和和獲取消息消費
Barista接口:Barista接口是定義來作為后面類的參數(shù),這一接口定義通道類型和通道名稱,
通道名稱
是作為配置用
,通道類型
則決定
了app會使用這一通道進行發(fā)送消息
還是從中接收消息
。@Output: 輸出注解,用于定義發(fā)送消息接口
@Input: 輸入注解,用于定義消息的消費者接口
@StreamListener: 用于定義監(jiān)聽方法的注解
使用Spring Cloud Stream 非常簡單,只需要使用好3個注解即可,在實現(xiàn)高性能消息的生成和消費場景非常合適,但是使用Spring Cloud Stream框架有一個非常大的問題就是不能實現(xiàn)可靠性投遞
,也就是沒法保證消息的100%可靠性,會存在少量消息丟失
問題。
這個原因是因為SpringCloudStream框架為了和Kafka兼顧
所有在實際工作中使用它的目的就是針對高性能的消息通信
的!這點就是在當(dāng)前版本SpringCloudStream的定位。