簡介
SpringCloud Stream是一個用來為微服務應用構建消息驅(qū)動能力的框架咙边。通過使用SpringCloud Stream帖努,可以有效簡化開發(fā)人員對消息中間件的使用復雜度荞怒,讓開發(fā)人員有更多的精力來關注核心業(yè)務洒琢。SpringCloud Stream只支持RabbitMq和Kafka這兩個消息中間件的配置
代碼演示
-
引入依賴
-
創(chuàng)建用于接收來自RabbitMq消息的消費者類SinkReceiver
在上面的例子中,我們通過@EnableBinding(Sink.class)綁定了sink接口褐桌,該接口是SpringCloud Stream中默認實現(xiàn)的對輸入消息通道的綁定,它的源碼實現(xiàn)如下:
另外荧嵌,@StreamListener注解作用是將被修飾的方法注冊為消息中間件上數(shù)據(jù)流的事件監(jiān)聽器,通過該注解將receive方法注冊為消息通道的監(jiān)聽處理器啦撮,當RabbitMq發(fā)布消息的時候谭网,receive方法會做出對應的響應動作
核心概念
- SpringCloud流式微服務模型
- Binder抽象消息中間件
- 持續(xù)發(fā)布/訂閱支持
- 支持消費者組
- 支持消費分區(qū)
- 可插拔的Binder API
流式微服務模型
一個SpringCloud Stream應用以消息中間件為核心,應用通過SpringCloud Stream注入的輸入/輸出通道與外部進行通信赃春,channels通過特定的binder實現(xiàn)與外部消息中間件通信愉择,架構圖如下所示:對消息中間件的抽象
Binder是SpringCloud Stream的一個抽象概念锥涕,是應用與消息中間件的粘合劑衷戈。SpringCloud Stream提供了對kafka和RabbitMq的抽象Binder來代表消息中間件层坠,抽象的Binder為靈活配置如何連接消息中間件及發(fā)送消息提供了良好的支持。
持續(xù)發(fā)布訂閱支持
流式微服務應用之間通過發(fā)布/訂閱模型通信破花,通過共享的topic來傳播數(shù)據(jù)。生產(chǎn)者把消息通過某個topic廣播出去蔚润,其他微服務通過訂閱topic來獲取廣播出來的消息觸發(fā)業(yè)務
消費者組
發(fā)布訂閱模型讓應用之間通過共享topic通信變得相當容易尺栖,不過在為高可用部署多個實例時,需要防止應用對該topic中的消息重復消費延赌,一條消息應該只能被一個消費者消費叉橱。SpringCloud Stream通過消費者組來實現(xiàn)上述需求,保證消息只被組中的一個消費者消費
分區(qū)支持
SpringCloud Stream為多個生產(chǎn)者實例的應用提供消息分區(qū)的支持窃祝。一個或多個生產(chǎn)者發(fā)送數(shù)據(jù)到多個消費者,把那個保證某個數(shù)據(jù)僅被某一個消費者實例消費粪小。