如何在Spring生態(tài)中玩轉(zhuǎn)RocketMQ

本篇文章給大家分享的是有關(guān)如何在Spring生態(tài)中玩轉(zhuǎn)RocketMQ,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

專(zhuān)注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)荔城免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了成百上千企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

RocketMQ 作為業(yè)務(wù)消息的首選,在消息和流處理領(lǐng)域被廣泛應(yīng)用。而微服務(wù)生態(tài) Spring 框架也是業(yè)務(wù)開(kāi)發(fā)中最受歡迎的框架,兩者的完美契合使得 RocketMQ 成為 Spring Messaging 實(shí)現(xiàn)中最受歡迎的消息實(shí)現(xiàn)。下面展示了 5 種在 Spring 生態(tài)中文玩轉(zhuǎn) RocketMQ 的方式,并描述了每個(gè)項(xiàng)目的特點(diǎn)和使用場(chǎng)景。文末可以直達(dá)在線體驗(yàn)。

前言

上世紀(jì) 90 年代末,隨著 Java EE(Enterprise Edition) 的出現(xiàn),特別是 Enterprise Java Beans 的使用需要復(fù)雜的描述符配置和死板復(fù)雜的代碼實(shí)現(xiàn),增加了廣大開(kāi)發(fā)者的學(xué)習(xí)曲線和開(kāi)發(fā)成本,由此基于簡(jiǎn)單的 XML 配置和普通 Java 對(duì)象 (Plain Old Java Objects) 的 Spring 技術(shù)應(yīng)運(yùn)而生,依賴注入 (Dependency Injection),控制反轉(zhuǎn) (Inversion of Control) 和面向切面編程 (AOP) 的技術(shù)更加敏捷地解決了傳統(tǒng) Java 企業(yè)及版本的不足。隨著 Spring 的持續(xù)演進(jìn),基于注解 (Annotation) 的配置逐漸取代了 XML 文件配置。除了依賴注入、控制翻轉(zhuǎn)、AOP 這些技術(shù),Spring 后續(xù)衍生出 AMQP、Transactional、Security、Batch、Data Access 等模塊,涉及開(kāi)發(fā)的各個(gè)領(lǐng)域。

如何在Spring生態(tài)中玩轉(zhuǎn)RocketMQ

2014 年 4 月 1 日,Spring Boot 1.0.0 正式發(fā)布。它基于“約定大于配置”(Convention over configuration)這一理念來(lái)快速地開(kāi)發(fā),測(cè)試,運(yùn)行和部署 Spring 應(yīng)用,并能通過(guò)簡(jiǎn)單地與各種啟動(dòng)器(如 spring-boot-web-starter)結(jié)合,讓?xiě)?yīng)用直接以命令行的方式運(yùn)行,不需再部署到獨(dú)立容器中。Spring Boot 的出現(xiàn)可以說(shuō)是 Spring 框架的第二春,它不但簡(jiǎn)化了開(kāi)發(fā)的流程,目前更是事實(shí)標(biāo)準(zhǔn)。下面這幅圖可以看出相同功能的 Spring 和 Spring Boot 的代碼實(shí)現(xiàn)對(duì)比。

如何在Spring生態(tài)中玩轉(zhuǎn)RocketMQ

Apache RocketMQ 是一款是業(yè)界知名的分布式消息和流處理中間件,它主要功能是消息分發(fā)、異步解耦、削峰填谷等。RocketMQ 是一款金融級(jí)消息及流數(shù)據(jù)平臺(tái),RocketMQ 在交易、支付鏈路上用的很多,主要是對(duì)消息鏈路質(zhì)量要求非常高的場(chǎng)景,能夠支持萬(wàn)億級(jí)消息洪峰。RocketMQ 在業(yè)務(wù)消息中被廣泛應(yīng)用,并衍生出順序消息、事務(wù)消息、延遲消息等匹配各類(lèi)業(yè)務(wù)場(chǎng)景的特殊消息。

本文的主角就是 Spring 和 RocketMQ,那幾乎每個(gè) Java 程序員都會(huì)使用 Spring 框架與支持豐富業(yè)務(wù)場(chǎng)景的 RocketMQ 會(huì)碰撞出怎么樣的火花?

RocketMQ 與 Spring 的碰撞

在介紹 RocketMQ 與 Spring 故事之前,不得不提到 Spring 中的兩個(gè)關(guān)于消息的框架,Spring Messaging 和 Spring Cloud Stream。它們都能夠與 Spring Boot 整合并提供了一些參考的實(shí)現(xiàn)。和所有的實(shí)現(xiàn)框架一樣,消息框架的目的是實(shí)現(xiàn)輕量級(jí)的消息驅(qū)動(dòng)的微服務(wù),可以有效地簡(jiǎn)化開(kāi)發(fā)人員對(duì)消息中間件的使用復(fù)雜度,讓系統(tǒng)開(kāi)發(fā)人員可以有更多的精力關(guān)注于核心業(yè)務(wù)邏輯的處理。

1. Spring Messaging

Spring Messaging 是 Spring Framework 4 中添加的模塊,是 Spring 與消息系統(tǒng)集成的一個(gè)擴(kuò)展性的支持。它實(shí)現(xiàn)了從基于 JmsTemplate 的簡(jiǎn)單的使用 JMS 接口到異步接收消息的一整套完整的基礎(chǔ)架構(gòu),Spring AMQP 提供了該協(xié)議所要求的類(lèi)似的功能集。在與 Spring Boot 的集成后,它擁有了自動(dòng)配置能力,能夠在測(cè)試和運(yùn)行時(shí)與相應(yīng)的消息傳遞系統(tǒng)進(jìn)行集成。

單純對(duì)于客戶端而言,Spring Messaging 提供了一套抽象的 API 或者說(shuō)是約定的標(biāo)準(zhǔn),對(duì)消息發(fā)送端和消息接收端的模式進(jìn)行規(guī)定,比如消息 Messaging 對(duì)應(yīng)的模型就包括一個(gè)消息體 Payload 和消息頭 Header。不同的消息中間件提供商可以在這個(gè)模式下提供自己的 Spring 實(shí)現(xiàn):在消息發(fā)送端需要實(shí)現(xiàn)的是一個(gè) XXXTemplate 形式的 Java Bean,結(jié)合 Spring Boot 的自動(dòng)化配置選項(xiàng)提供多個(gè)不同的發(fā)送消息方法;在消息的消費(fèi)端是一個(gè) XXXMessageListener 接口(實(shí)現(xiàn)方式通常會(huì)使用一個(gè)注解來(lái)聲明一個(gè)消息驅(qū)動(dòng)的 POJO),提供回調(diào)方法來(lái)監(jiān)聽(tīng)和消費(fèi)消息,這個(gè)接口同樣可以使用 Spring Boot 的自動(dòng)化選項(xiàng)和一些定制化的屬性。

如何在Spring生態(tài)中玩轉(zhuǎn)RocketMQ

在 Apache RocketMQ 生態(tài)中,RocketMQ-Spring-Boot-Starter(下文簡(jiǎn)稱 RocketMQ-Spring)就是一個(gè)支持 Spring Messaging API 標(biāo)準(zhǔn)的項(xiàng)目。該項(xiàng)目把 RocketMQ 的客戶端使用 Spring Boot 的方式進(jìn)行了封裝,可以讓用戶通過(guò)簡(jiǎn)單的 annotation 和標(biāo)準(zhǔn)的 Spring Messaging API 編寫(xiě)代碼來(lái)進(jìn)行消息的發(fā)送和消費(fèi),也支持?jǐn)U展出 RocketMQ 原生 API 來(lái)支持更加豐富的消息類(lèi)型。在 RocketMQ-Spring 畢業(yè)初期,RocketMQ 社區(qū)同學(xué)請(qǐng) Spring 社區(qū)的同學(xué)對(duì) RocketMQ-Spring 代碼進(jìn)行 review,引出一段羅美琪(RocketMQ)和春波特(Spring Boot)故事的佳話,著名 Spring 布道師 Josh Long 向國(guó)外同學(xué)介紹如何使用 RocketMQ-Spring 收發(fā)消息。RocketMQ-Spring 也在短短兩年時(shí)間超越 Spring-Kafka 和 Spring-AMQP(注:兩者均由 Spring 社區(qū)維護(hù)),成為 Spring Messaging 生態(tài)中最活躍的消息項(xiàng)目。

如何在Spring生態(tài)中玩轉(zhuǎn)RocketMQ

2. Spring Cloud Stream

Spring Cloud Stream 結(jié)合了 Spring Integration 的注解和功能,它的應(yīng)用模型如下:

如何在Spring生態(tài)中玩轉(zhuǎn)RocketMQ

Spring Cloud Stream 框架中提供一個(gè)獨(dú)立的應(yīng)用內(nèi)核,它通過(guò)輸入 (@Input) 和輸出 (@Output) 通道與外部世界進(jìn)行通信,消息源端 (Source) 通過(guò)輸入通道發(fā)送消息,消費(fèi)目標(biāo)端 (Sink) 通過(guò)監(jiān)聽(tīng)輸出通道來(lái)獲取消費(fèi)的消息。這些通道通過(guò)專(zhuān)用的 Binder 實(shí)現(xiàn)與外部代理連接。開(kāi)發(fā)人員的代碼只需要針對(duì)應(yīng)用內(nèi)核提供的固定的接口和注解方式進(jìn)行編程,而不需要關(guān)心運(yùn)行時(shí)具體的 Binder 綁定的消息中間件。

在運(yùn)行時(shí),Spring Cloud Stream 能夠自動(dòng)探測(cè)并使用在 classpath 下找到的 Binder。這樣開(kāi)發(fā)人員可以輕松地在相同的代碼中使用不同類(lèi)型的中間件:僅僅需要在構(gòu)建時(shí)包含進(jìn)不同的 Binder。在更加復(fù)雜的使用場(chǎng)景中,也可以在應(yīng)用中打包多個(gè) Binder 并讓它自己選擇 Binder,甚至在運(yùn)行時(shí)為不同的通道使用不同的 Binder。 

Binder 抽象使得 Spring Cloud Stream 應(yīng)用可以靈活的連接到中間件,加之 Spring Cloud Stream 使用利用了 Spring Boot 的靈活配置配置能力,這樣的配置可以通過(guò)外部配置的屬性和 Spring Boot 支持的任何形式來(lái)提供(包括應(yīng)用啟動(dòng)參數(shù)、環(huán)境變量和 application.yml 或者 application.properties 文件),部署人員可以在運(yùn)行時(shí)動(dòng)態(tài)選擇通道連接 destination(例如,RocketMQ 的 topic 或者 RabbitMQ 的 exchange)。

Spring Cloud Stream 屏蔽了底層消息中間件的實(shí)現(xiàn)細(xì)節(jié),希望以統(tǒng)一的一套 API 來(lái)進(jìn)行消息的發(fā)送/消費(fèi),底層消息中間件的實(shí)現(xiàn)細(xì)節(jié)由各消息中間件的 Binder 完成。Spring 官方實(shí)現(xiàn)了 Rabbit binder 和 Kafka Binder。Spring Cloud Alibaba 實(shí)現(xiàn)了 RocketMQ Binder,其主要實(shí)現(xiàn)原理是把發(fā)送消息最終代理給了 RocketMQ-Spring 的 RocketMQTemplate,在消費(fèi)端則內(nèi)部會(huì)啟動(dòng) RocketMQ-Spring Consumer Container 來(lái)接收消息。以此為基礎(chǔ),Spring Cloud Alibaba 還實(shí)現(xiàn)了 Spring Cloud Bus RocketMQ, 用戶可以使用 RocketMQ 作為 Spring Cloud 體系內(nèi)的消息總線,來(lái)連接分布式系統(tǒng)的所有節(jié)點(diǎn)。通過(guò) Spring Cloud Stream RocketMQ Binder,RocketMQ 可以與 Spring Cloud 生態(tài)更好的結(jié)合。比如與 Spring Cloud Data Flow、Spring Cloud Funtion 結(jié)合,讓 RocketMQ 可以在 Spring 流計(jì)算生態(tài)、Serverless(FaaS) 項(xiàng)目中被使用。

如今 Spring Cloud Stream RocketMQ Binder 和 Spring Cloud Bus RocketMQ 作為 Spring Cloud Alibaba 的實(shí)現(xiàn)已登陸 Spring 的官網(wǎng),Spring Cloud Alibaba 也成為 Spring Cloud 最活躍的實(shí)現(xiàn)。

如何在 Spring 生態(tài)中選擇 RocketMQ 實(shí)現(xiàn)?

通過(guò)介紹 Spring 中的消息框架,介紹了以 RocketMQ 為基礎(chǔ)與 Spring 消息框架結(jié)合的幾個(gè)項(xiàng)目,主要是 RocketMQ-Spring、Spring Cloud Stream RocketMQ Binder、Spring Cloud Bus RocketMQ、Spring Data Flow 和 Spring Cloud Function。它們之間的關(guān)系可以如下圖表示。

如何在Spring生態(tài)中玩轉(zhuǎn)RocketMQ

如何在實(shí)際業(yè)務(wù)開(kāi)發(fā)中選擇相應(yīng)項(xiàng)目進(jìn)行使用?下面分別列出每個(gè)項(xiàng)目的特點(diǎn)和使用場(chǎng)景。

1. RocketMQ-Spring

特點(diǎn):

  • 作為起步依賴,簡(jiǎn)單引入一個(gè)包就能在 Spring 生態(tài)用到 RocketMQ 客戶端的所有功能。

  • 利用了大量自動(dòng)配置和注解簡(jiǎn)化了編程模型,并且支持 Spring Messaging API。

  • 與 RocketMQ 原生 Java SDK 的功能完全對(duì)齊。

使用場(chǎng)景:

  • 適合在 Spring Boot 中使用 RocketMQ 的用戶,希望能用到 RocketMQ 原生 java 客戶端的所有功能,并通過(guò) Spring 注解和自動(dòng)配置簡(jiǎn)化編程模型。

2. Spring Cloud Stream RocketMQ Binder

特點(diǎn):

  • 屏蔽底層 MQ 實(shí)現(xiàn)細(xì)節(jié),上層 Spring Cloud Stream 的 API 是統(tǒng)一的。如果想從 Kafka 切到 RocketMQ,直接改個(gè)配置即可。

  • 與 Spring Cloud 生態(tài)整合更加方便。比如 Spring Cloud Data Flow,這上面的流計(jì)算都是基于 Spring Cloud Stream;Spring Cloud Bus 消息總線內(nèi)部也是用的 Spring Cloud Stream。

  • Spring Cloud Stream 提供的注解,編程體驗(yàn)都是非常棒。

使用場(chǎng)景:

  • 在代碼層面能完全屏蔽底層消息中間件的用戶,并且希望能項(xiàng)目能更好的接入 Spring Cloud 生態(tài)(Spring Cloud Data Flow、Spring Cloud Funtcion等)。

3. Spring Cloud Bus RocketMQ

特點(diǎn):

  • 將 RocketMQ 作為事件的“傳輸器”,通過(guò)發(fā)送事件(消息)到消息隊(duì)列上,從而廣播到訂閱該事件(消息)的所有節(jié)點(diǎn)上,完成事件的分發(fā)和通知。

使用場(chǎng)景:

  • 在 Spring 生態(tài)中希望用 RocketMQ 做消息總線的用戶,可以用在應(yīng)用間事件的通信,配置中心客戶端刷新等場(chǎng)景。

4. Spring Cloud Data Flow

特點(diǎn):

  • 以 Source/Processor/Sink 組件進(jìn)行流式任務(wù)處理。RocketMQ 作為流處理過(guò)程中的中間存儲(chǔ)組件。

使用場(chǎng)景:

  • 流處理,大數(shù)據(jù)處理場(chǎng)景。

5. Spring Cloud Function

特點(diǎn):

  • 消息的消費(fèi)/生產(chǎn)/處理都是一次函數(shù)調(diào)用,融合 Java 生態(tài)的 Function 模型。

使用場(chǎng)景:

  • Serverless 場(chǎng)景。

以上就是如何在Spring生態(tài)中玩轉(zhuǎn)RocketMQ,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁(yè)標(biāo)題:如何在Spring生態(tài)中玩轉(zhuǎn)RocketMQ
文章鏈接:http://bm7419.com/article28/psddjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、商城網(wǎng)站網(wǎng)站維護(hù)、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站制作、ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)