SpringCloud進(jìn)階:Spring Cloud Stream核心組件

?我的博客:程序員笑笑生,歡迎瀏覽博客成箫!

?關(guān)注公眾號(hào):"程序員笑笑生", 回復(fù) "Spring Cloud"旨枯、"Spring Boot" 獲取 全套 視頻教程蹬昌!時(shí)間有限!可掃描文章下方二維碼攀隔!

?上一章 SpringCloud 進(jìn)階:-消息驅(qū)動(dòng)Spring Cloud Stream當(dāng)中皂贩,我們初始的了解Spring Cloud Stream和如何簡(jiǎn)單的構(gòu)建消息驅(qū)動(dòng)的服務(wù)的。本章我們將了解一下Spring Cloud Stream的組件竞慢。

前言

?上文我們通過一個(gè)簡(jiǎn)單的實(shí)例先紫,利用Spring Cloud Stream實(shí)現(xiàn)了一個(gè)發(fā)布-訂閱的模型。從中我們很容易理解筹煮,Spring Cloud Stream有三個(gè)角色,分別是遮精,消息發(fā)布者,消費(fèi)者和消息通訊系統(tǒng)败潦。

主要是以消息通訊系統(tǒng)為中心本冲,如下圖:

file

一 、 Spring Cloud Stream核心組件

1劫扒、1 Binder

? Binder 是Spring Cloud Steram的一個(gè)重要的抽象檬洞,目前Spring Cloud Stream實(shí)現(xiàn)了面向Kafka和RabbitMQ的Binder。有了Binder有很方便的連接中間件了沟饥。Binder提供了消費(fèi)者分組和消息分區(qū)的特性添怔。

1湾戳、2 Channel

?即通道,是隊(duì)列Queue的一種抽象广料,在具體的消息通訊系統(tǒng)中砾脑,隊(duì)列作用就是實(shí)現(xiàn)存儲(chǔ)和轉(zhuǎn)發(fā)的媒介,我們通過Channel對(duì)隊(duì)列進(jìn)行配置艾杏。

1韧衣、3 Source和Sink

?我們不是第一次看到Source和Sink了,簡(jiǎn)單的可理解為輸入和輸出购桑。注意:這里的參照對(duì)象是Spring Cloud Stream自身畅铭,從Stream發(fā)布消息就是輸出,接受消息就是輸入勃蜘。

?在Spring Cloud Stream中硕噩,Source組件是使用一個(gè)POJO對(duì)象發(fā)布消息的,該對(duì)象需要序列化然后發(fā)布到Channel中缭贡,Sink反序列化POJO對(duì)象榴徐。在底層的處理機(jī)制上,需要借助Spring Integration這個(gè)企業(yè)服務(wù)總線的組件匀归。

二 Spring Integration簡(jiǎn)介

?Spring Integration的定位是一種企業(yè)服務(wù)總線 ESB(Enterprise Service Bus),在Spring Integration中坑资,通道被抽象成兩種表現(xiàn)形式:PollableChannel和SubscribableChannel,都是繼承了MessageChannel:

MessageChannel

package org.springframework.messaging;

public interface MessageChannel {

    long INDEFINITE_TIMEOUT = -1;

    default boolean send(Message<?> message) {
        return send(message, INDEFINITE_TIMEOUT);
    }

    boolean send(Message<?> message, long timeout);

}

PollableChannel:通過輪詢操作主動(dòng)獲取消息穆端,receive方法

public interface PollableChannel extends MessageChannel {
    
    Message<?> receive();

    Message<?> receive(long timeout);
    
    }

SubscribableChannel 發(fā)布/訂閱模式 袱贮,通過回調(diào)函數(shù)MessageHandler實(shí)現(xiàn)事件響應(yīng):

public interface SubscribableChannel extends MessageChannel {

    boolean subscribe(MessageHandler handler);

    boolean unsubscribe(MessageHandler handler);

}

三 、Spring Cloud Stream和Spring Integration

?結(jié)合了Integration体啰,我們就更容易理解Source和Sink了攒巍,Source和Sink都是接口,Source定義如下荒勇,通過MessageChannel發(fā)送消息柒莉,@Output定義了一個(gè)輸出通道,消息通過該通道離開應(yīng)用:

public interface Source {

    String OUTPUT = "output";

    @Output(Source.OUTPUT)
    MessageChannel output();

}

?同樣Sink接口沽翔,通過SubscribableChannel實(shí)現(xiàn)消息的接受兢孝,@Input注解定義了一個(gè)輸入通道,接受來(lái)自外部的消息:

public interface Sink {
    String INPUT = "input";
    @Input(Sink.INPUT)
    SubscribableChannel input();

}

@Input和@Output可以使用通道名稱作為參數(shù)仅偎,沒有名稱跨蟹,默認(rèn)是方法名稱,也就是"input"橘沥、"output"窗轩,一個(gè)SpringCloudStream應(yīng)用程序,可以存在任意數(shù)量的Input和Output通道座咆。

總結(jié)

?本章著重的介紹了Spring Cloud Stream的核心組件痢艺,以及Spring Integration的簡(jiǎn)介仓洼,這樣有利于更好的理解Spring Cloud Stream。

以就是本期的分享堤舒,你還可以關(guān)注公眾號(hào): 程序員笑笑生衬潦,關(guān)注更多精彩內(nèi)容!

file

SpringCloud基礎(chǔ)教程(一)-微服務(wù)與SpringCloud

SpringCloud基礎(chǔ)教程(二)-服務(wù)發(fā)現(xiàn) Eureka

SpringCloud基礎(chǔ)教程(三)-Eureka進(jìn)階

SpringCloud 基礎(chǔ)教程(四)-配置中心入門

SpringCloud基礎(chǔ)教程(五)-配置中心熱生效和高可用

SpringCloud 基礎(chǔ)教程(六)-負(fù)載均衡Ribbon

SpringCloud 基礎(chǔ)教程(七)-Feign聲明式服務(wù)調(diào)用

SpringCloud 基礎(chǔ)教程(八)-Hystrix熔斷器(上)

SpringCloud 基礎(chǔ)教程(九)-Hystrix服務(wù)監(jiān)控(下)

SpringCloud 基礎(chǔ)教程(十)-Zull服務(wù)網(wǎng)關(guān)

SpringCloud 基礎(chǔ)教程(十一)- Sleuth 調(diào)用鏈追蹤簡(jiǎn)介

SpringCloud 基礎(chǔ)教程(十二)-Zipkin 分布式鏈路追蹤系統(tǒng)搭建

SpringCloud 進(jìn)階: 消息驅(qū)動(dòng)(入門) Spring Cloud Stream【Greenwich.SR3】

更多精彩內(nèi)容植酥,請(qǐng)期待...

本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末弦牡,一起剝皮案震驚了整個(gè)濱河市友驮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌驾锰,老刑警劉巖卸留,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異椭豫,居然都是意外死亡耻瑟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門赏酥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)喳整,“玉大人,你說(shuō)我怎么就攤上這事裸扶】蚨迹” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵呵晨,是天一觀的道長(zhǎng)魏保。 經(jīng)常有香客問我,道長(zhǎng)摸屠,這世上最難降的妖魔是什么谓罗? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮季二,結(jié)果婚禮上檩咱,老公的妹妹穿的比我還像新娘。我一直安慰自己胯舷,他們只是感情好税手,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著需纳,像睡著了一般芦倒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上不翩,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天兵扬,我揣著相機(jī)與錄音麻裳,去河邊找鬼。 笑死器钟,一個(gè)胖子當(dāng)著我的面吹牛津坑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播傲霸,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼疆瑰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了昙啄?” 一聲冷哼從身側(cè)響起穆役,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎梳凛,沒想到半個(gè)月后耿币,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡韧拒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年淹接,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叛溢。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡塑悼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出楷掉,到底是詐尸還是另有隱情拢肆,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布靖诗,位于F島的核電站郭怪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏刊橘。R本人自食惡果不足惜鄙才,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望促绵。 院中可真熱鬧攒庵,春花似錦、人聲如沸败晴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)尖坤。三九已至稳懒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間慢味,已是汗流浹背场梆。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工墅冷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人或油。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓寞忿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親顶岸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子腔彰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容