日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

如何在 Spring 生态中玩转 RocketMQ?

發(fā)布時(shí)間:2025/3/20 javascript 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在 Spring 生态中玩转 RocketMQ? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者 |?通融、洛夜
來源 | 阿里巴巴云原生公眾號(hào)

RocketMQ 作為業(yè)務(wù)消息的首選,在消息和流處理領(lǐng)域被廣泛應(yīng)用。而微服務(wù)生態(tài) Spring 框架也是業(yè)務(wù)開發(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),增加了廣大開發(fā)者的學(xué)習(xí)曲線和開發(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 等模塊,涉及開發(fā)的各個(gè)領(lǐng)域。

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

Apache RocketMQ 是一款是業(yè)界知名的分布式消息和流處理中間件,它主要功能是消息分發(fā)、異步解耦、削峰填谷等。RocketMQ 是一款金融級(jí)消息及流數(shù)據(jù)平臺(tái),RocketMQ 在交易、支付鏈路上用的很多,主要是對(duì)消息鏈路質(zhì)量要求非常高的場(chǎng)景,能夠支持萬億級(jí)消息洪峰。RocketMQ 在業(yè)務(wù)消息中被廣泛應(yīng)用,并衍生出順序消息、事務(wù)消息、延遲消息等匹配各類業(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)化開發(fā)人員對(duì)消息中間件的使用復(fù)雜度,讓系統(tǒng)開發(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é)議所要求的類似的功能集。在與 Spring Boot 的集成后,它擁有了自動(dòng)配置能力,能夠在測(cè)試和運(yùn)行時(shí)與相應(yīng)的消息傳遞系統(tǒng)進(jìn)行集成。

單純對(duì)于客戶端而言,Spring Messaging 提供了一套抽象的 API 或者說是約定的標(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è)注解來聲明一個(gè)消息驅(qū)動(dòng)的 POJO),提供回調(diào)方法來監(jiān)聽和消費(fèi)消息,這個(gè)接口同樣可以使用 Spring Boot 的自動(dòng)化選項(xiàng)和一些定制化的屬性。

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

2. Spring Cloud Stream

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

Spring Cloud Stream 框架中提供一個(gè)獨(dú)立的應(yīng)用內(nèi)核,它通過輸入 (@Input) 和輸出 (@Output) 通道與外部世界進(jìn)行通信,消息源端 (Source) 通過輸入通道發(fā)送消息,消費(fèi)目標(biāo)端 (Sink) 通過監(jiān)聽輸出通道來獲取消費(fèi)的消息。這些通道通過專用的 Binder 實(shí)現(xiàn)與外部代理連接。開發(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。這樣開發(fā)人員可以輕松地在相同的代碼中使用不同類型的中間件:僅僅需要在構(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 的靈活配置配置能力,這樣的配置可以通過外部配置的屬性和 Spring Boot 支持的任何形式來提供(包括應(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 來進(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 來接收消息。以此為基礎(chǔ),Spring Cloud Alibaba 還實(shí)現(xiàn)了 Spring Cloud Bus RocketMQ, 用戶可以使用 RocketMQ 作為 Spring Cloud 體系內(nèi)的消息總線,來連接分布式系統(tǒng)的所有節(jié)點(diǎn)。通過 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)?

通過介紹 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)系可以如下圖表示。

如何在實(shí)際業(yè)務(wù)開發(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 客戶端的所有功能,并通過 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 作為事件的“傳輸器”,通過發(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 作為流處理過程中的中間存儲(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)中接入 RockeMQ 的 5 種方法,讓各位開發(fā)者對(duì)幾種經(jīng)典場(chǎng)景有宏觀的了解。后續(xù)會(huì)有專欄詳細(xì)介紹上述各個(gè)項(xiàng)目的具體使用方法和應(yīng)用場(chǎng)景,真正地在 Spring 生態(tài)中玩轉(zhuǎn) RocketMQ!

在 PC 端登錄 start.aliyun.com 知行動(dòng)手實(shí)驗(yàn)室,沉浸式體驗(yàn)在線交互教程

總結(jié)

以上是生活随笔為你收集整理的如何在 Spring 生态中玩转 RocketMQ?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。