Spring Cloud Stream介紹
Spring Cloud Stream是一個(gè)用于構(gòu)建消息驅(qū)動(dòng)的微服務(wù)應(yīng)用程序的框架晰房。Spring Cloud Stream以Spring Boot為基礎(chǔ)酵颁,創(chuàng)建獨(dú)立的生產(chǎn)級(jí)Spring應(yīng)用程序躏惋,并使用Spring Integration提供與消息代理的連接簿姨。它提供了來(lái)自多個(gè)供應(yīng)商的中間件的的配置簸搞,引入了發(fā)布-訂閱語(yǔ)義、使用者組和分區(qū)的概念域仇。
知識(shí)點(diǎn)
- Spring Messaging
- Spring Integration
- Spring Cloud Stream
基礎(chǔ)內(nèi)容
Spring Messaging
Spring Messaging 是 Spring Framework 中的一個(gè)模塊寺擂,其作用就是統(tǒng)一消息的編程模型怔软。
- Message挡逼,消息對(duì)象,包含Header和Payload嘱能;Payload可以是任意類型,Header定義了通用信息(例如:id憔涉、時(shí)間和返回地址等);
- Message Channel兜叨,Pipes and Filters模型中的Pipe国旷;其中定義了用來(lái)發(fā)送消息到此Pipe的send方法茫死;其根據(jù)MessageHandler中兩種獲取消息的方式定義了兩個(gè)子接口:PollableChannel用來(lái)表示支持拉模型的通道,其中定義了receive方法用來(lái)支持MessageHandler主動(dòng)拉取消息峦萎;SubscribableChannel用來(lái)表示支持推模型(發(fā)布/訂閱模型)的通道,其中定義了subscribe和unsubscribe方法用來(lái)支持MessageHandler的訂閱和取消訂閱被环;Spring Messaging 定義了DestinationResolver接口用來(lái)選擇消息的目的地详幽,消息的目的地可以是Pipe(MessageChannel)唇聘,也可以是Filter(MessageHandler);
- AbstractMessageProducingHandler:可以指定一個(gè)outputChannel剥险,處理完消息之后的結(jié)果發(fā)送到此Channel中宪肖;
- AbstractReplyProducingMessageHandler:不用指定outputChannel,inputChannel就是outputChannel夫凸;
- AbstractReplyProducingPostProcessingMessageHandler:處理完消息之后夭拌,在發(fā)送結(jié)果到outputChannel;
Spring Integration
Spring Integration 提供了 Spring 編程模型的擴(kuò)展用來(lái)支持企業(yè)集成模式(Enterprise Integration Patterns)蒜绽,是對(duì) Spring Messaging 的擴(kuò)展躲雅。
它提出了不少新的概念骡和,包括消息路由MessageRoute、消息分發(fā)MessageDispatcher钮科、消息過(guò)濾Filter婆赠、消息轉(zhuǎn)換Transformer、消息聚合Aggregator休里、消息分割Splitter等等妙黍。同時(shí)還提供了MessageChannel和MessageHandler的實(shí)現(xiàn),分別包括 DirectChannel畜挨、ExecutorChannel噩凹、PublishSubscribeChannel和MessageFilter毡咏、ServiceActivatingHandler、MethodInvokingSplitter 等內(nèi)容堵泽。
Spring Cloud Stream
SCS 在 Spring Integration 的基礎(chǔ)上進(jìn)行了封裝迎罗,提出了Binder, Binding, @EnableBinding, @StreamListener等概念。
SCS 與 Spring Boot Actuator 整合纹安,提供了/bindings, /channelsendpoint厢岂。
SCS 與 Spring Boot Externalized Configuration 整合,提供了BindingProperties, BinderProperties等外部化配置類塔粒。
SCS 增強(qiáng)了消息發(fā)送失敗的和消費(fèi)失敗情況下的處理邏輯等功能卒茬。
SCS 是 Spring Integration 的加強(qiáng),同時(shí)與 Spring Boot 體系進(jìn)行了融合努隙,也是 Spring Cloud Bus 的基礎(chǔ)。它屏蔽了底層消息中間件的實(shí)現(xiàn)細(xì)節(jié)荸镊,希望以統(tǒng)一的一套 API 來(lái)進(jìn)行消息的發(fā)送/消費(fèi)躬存,底層消息中間件的實(shí)現(xiàn)細(xì)節(jié)由各消息中間件的 Binder 完成舀锨。
Binder是提供與外部消息中間件集成的組件岭洲,為構(gòu)造Binding提供了 2 個(gè)方法,分別是bindConsumer和bindProducer坎匿,它們分別用于構(gòu)造生產(chǎn)者和消費(fèi)者盾剩。目前官方的實(shí)現(xiàn)有 Rabbit Binder 和 Kafka Binder, Spring Cloud Alibaba 內(nèi)部已經(jīng)實(shí)現(xiàn)了 RocketMQ Binder替蔬。
- Binders
- Bindings告私,綁定在外部消息傳遞系統(tǒng)(例如,隊(duì)列承桥、主題等)與應(yīng)用程序提供的生產(chǎn)者和消費(fèi)者之間提供了橋梁驻粟。
- Producers
- Consumers