spring Cloud Stream

什么是Spring Cloud Stream

Spring Cloud Stream 是一個用來為微服務應用構建消息驅動能力的框架懦冰。它可以基于Spring Boot 來創(chuàng)建獨立的,可用于生產的Spring 應用程序。他通過使用Spring Integration來連接消息代理中間件以實現(xiàn)消息事件驅動妥畏。Spring Cloud Stream 為一些供應商的消息中間件產品提供了個性化的自動化配置實現(xiàn)寡键,引用了發(fā)布-訂閱、消費組懒熙、分區(qū)的三個核心概念昼弟。目前僅支持RabbitMQ啤它、Kafka。

企業(yè)應用集成(EAI)

企業(yè)應用集成(EAI)是集成應用之間數(shù)據和服務的一種應用技術。四種集成風格:

  • 文件傳輸:兩個系統(tǒng)生成文件变骡,文件的有效負載就是由另一個系統(tǒng)處理的消息救欧。該類風格的例子之一是針對文件輪詢目錄或FTP目錄,并處理該文件锣光。
  • 共享數(shù)據庫:兩個系統(tǒng)查詢同一個數(shù)據庫以獲取要傳遞的數(shù)據。一個例子是你部署了兩個EAR應用铝耻,它們的實體類(JPA誊爹、Hibernate等)共用同一個表。
  • 遠程過程調用:兩個系統(tǒng)都暴露另一個能調用的服務瓢捉。該類例子有EJB服務频丘,或SOAP和REST服務。
  • 消息:兩個系統(tǒng)連接到一個公用的消息系統(tǒng)泡态,互相交換數(shù)據搂漠,并利用消息調用行為。該風格的例子就是眾所周知的中心輻射式的(hub-and-spoke)JMS架構某弦。

Spring Integration作為一種企業(yè)級集成框架桐汤,遵從現(xiàn)代經典書籍《企業(yè)集成模式》,為開發(fā)者提供了一種便捷的實現(xiàn)模式靶壮。Spring Integration構建在Spring控制反轉設計模式之上怔毛,抽象了消息源和目標,利用消息傳送和消息操作來集成應用環(huán)境下的各種組件腾降。消息和集成關注點都被框架處理拣度,所以業(yè)務組件能更好地與基礎設施隔離,從而降低開發(fā)者所要面對的復雜的集成職責螃壤。

核心概念

應用模型

Spring Cloud Stream由一個中間件中立的核組成抗果。應用通過Spring Cloud Stream插入的input和output通道與外界交流。通道通過指定中間件的Binder實現(xiàn)與外部代理連接奸晴。
業(yè)務開發(fā)者不再關注具體消息中間件冤馏,只需關注Binder對應用程序提供的抽象概念來使用消息中間件實現(xiàn)業(yè)務即可。


應用模型.png
綁定器(Binder)

通過定義綁定器作為中間層寄啼,實現(xiàn)了應用程序與消息中間件細節(jié)之間的隔離宿接。通過向應用程序暴露統(tǒng)一的Channel,使得應用程序不需要再考慮各種不同的消息中間件的實現(xiàn)辕录。當需要升級消息中間件睦霎,或者是更換其他消息中間件產品時,我們需要做的就是更換對應的Binder綁定器而不需要修改任何應用邏輯 走诞。
目前只提供了RabbitMQ和Kafka的Binder實現(xiàn)

發(fā)布-訂閱(Publish-Subscribe)

應用間通信遵照發(fā)布-訂閱模型副女,消息通過共享主題進行廣播。下圖所示蚣旱,顯示了交互的Spring Cloud Stream 應用的典型布局碑幅。


Spring Cloud Stream發(fā)布訂閱模型.png

未處理的傳感數(shù)據發(fā)布到raw-sensor-data的Topic進行廣播戴陡,Averages 和IngestHDFS同時訂閱了此消息,收到消息后觸發(fā)自身的處理邏輯沟涨。
Topic可能對應不同的概念恤批,在RabbitMQ表示的是Exchange,Kafka中對應Topic

消費組(Consumer Groups)

由于發(fā)布-訂閱模型使得共享主題的應用之間連接更簡便裹赴,創(chuàng)建給定應用的不同實例來進行彈性擴張的能力也同樣重要喜庞。如果存在多個應用實例,那么同一應用的額不同實例便會成為相互競爭的消費者棋返,其中應該只有一個實例處理給定消息延都。
Spring Cloud Stream通過消費者組的概念給這種情況進行建模。每一個單獨的消費者可以使用spring.cloud.stream.bindings.input.group屬性來指定一個組名字睛竣。下圖中展示的消費者們晰房,這一屬性被設置為spring.cloud.stream.bindings.input.group=hdfsWrite或者spring.cloud.stream.bindings.input.group=average。

所有訂閱給定目標的組都會收到發(fā)布消息的一個拷貝射沟,但是每一個組內只有一個成員會收到該消息殊者。默認情況下,如果沒有指定組验夯,Spring Cloud Stream 會將該應用指定給一個匿名的獨立的單成員消費者組幽污,后者與所有其他組都處于一個發(fā)布-訂閱關系中。

目前只提供了RabbitMQ和Kafka的Binder實現(xiàn)


消費組.png
消息分區(qū)

Spring Cloud Stream對給定應用的多個實例之間分隔數(shù)據予以支持簿姨。在分隔方案中距误,物理交流媒介(如:代理主題)被視為分隔成了多個片(partitions)。一個或者多個生產者應用實例給多個消費者應用實例發(fā)送消息并確保相同特征的數(shù)據被同一消費者實例處理扁位。
Spring Cloud Stream對分割的進程實例實現(xiàn)進行了抽象准潭。使得Spring Cloud Stream 為不具備分區(qū)功能的消息中間件(RabbitMQ)也增加了分區(qū)功能擴展。


消息分區(qū).png
Durability

消息事件的持久化是必不可少的域仇。Spring Cloud Stream 可以動態(tài)的選擇一個消息隊列是持久化刑然,還是 present。

官方文檔
Stream 入門暇务、主要概念與自定義消息發(fā)送與接收

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末泼掠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子垦细,更是在濱河造成了極大的恐慌择镇,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件括改,死亡現(xiàn)場離奇詭異腻豌,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門吝梅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虱疏,“玉大人,你說我怎么就攤上這事苏携∽龅桑” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵右冻,是天一觀的道長装蓬。 經常有香客問我,道長国旷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任茫死,我火速辦了婚禮跪但,結果婚禮上,老公的妹妹穿的比我還像新娘峦萎。我一直安慰自己屡久,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布爱榔。 她就那樣靜靜地躺著被环,像睡著了一般。 火紅的嫁衣襯著肌膚如雪详幽。 梳的紋絲不亂的頭發(fā)上筛欢,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音唇聘,去河邊找鬼版姑。 笑死,一個胖子當著我的面吹牛迟郎,可吹牛的內容都是我干的剥险。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼宪肖,長吁一口氣:“原來是場噩夢啊……” “哼表制!你這毒婦竟也來了?” 一聲冷哼從身側響起控乾,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤么介,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蜕衡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體夭拌,經...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸽扁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒜绽。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖桶现,靈堂內的尸體忽然破棺而出躲雅,到底是詐尸還是另有隱情,我是刑警寧澤骡和,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布相赁,位于F島的核電站,受9級特大地震影響慰于,放射性物質發(fā)生泄漏钮科。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一婆赠、第九天 我趴在偏房一處隱蔽的房頂上張望绵脯。 院中可真熱鬧,春花似錦休里、人聲如沸蛆挫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽悴侵。三九已至,卻和暖如春拭嫁,著一層夾襖步出監(jiān)牢的瞬間可免,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工做粤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留巴元,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓驮宴,卻偏偏與公主長得像逮刨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子堵泽,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348