?我的博客:程序員笑笑生,歡迎瀏覽博客成箫!
?關(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)為中心本冲,如下圖:
一 、 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)容!
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ā)布!