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

歡迎訪問 生活随笔!

生活随笔

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

javascript

如何在Spring生态中玩转RocketMQ?

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

簡介:?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)和使用場景。文末可以直達(dá)在線體驗(yàn)。

?

?

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)和使用場景。文末可以直達(dá)在線體驗(yàn)。

一 前言

上世紀(jì)90年代末,隨著Java EE(Enterprise Edition)的出現(xiàn),特別是Enterprise Java Beans的使用需要復(fù)雜的描述符配置和死板復(fù)雜的代碼實(shí)現(xiàn),增加了廣大開發(fā)者的學(xué)習(xí)曲線和開發(fā)成本,由此基于簡單的XML配置和普通Java對象(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ā),測試,運(yùn)行和部署Spring應(yīng)用,并能通過簡單地與各種啟動(dòng)器(如spring-boot-web-starter)結(jié)合,讓應(yīng)用直接以命令行的方式運(yùn)行,不需再部署到獨(dú)立容器中。Spring Boot的出現(xiàn)可以說是Spring框架的第二春,它不但簡化了開發(fā)的流程,目前更是事實(shí)標(biāo)準(zhǔn)。下面這幅圖可以看出相同功能的Spring和Spring Boot的代碼實(shí)現(xiàn)對比。

?

?

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

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

二 RocketMQ與Spring的碰撞

在介紹RocketMQ與Spring故事之前,不得不提到Spring中的兩個(gè)關(guān)于消息的框架,Spring Messaging和Spring Cloud Stream。它們都能夠與Spring Boot整合并提供了一些參考的實(shí)現(xiàn)。和所有的實(shí)現(xiàn)框架一樣,消息框架的目的是實(shí)現(xiàn)輕量級的消息驅(qū)動(dòng)的微服務(wù),可以有效地簡化開發(fā)人員對消息中間件的使用復(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的簡單的使用JMS接口到異步接收消息的一整套完整的基礎(chǔ)架構(gòu),Spring AMQP提供了該協(xié)議所要求的類似的功能集。在與Spring Boot的集成后,它擁有了自動(dòng)配置能力,能夠在測試和運(yùn)行時(shí)與相應(yīng)的消息傳遞系統(tǒng)進(jìn)行集成。

單純對于客戶端而言,Spring Messaging提供了一套抽象的API或者說是約定的標(biāo)準(zhǔn),對消息發(fā)送端和消息接收端的模式進(jìn)行規(guī)定,比如消息Messaging對應(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)方式通常會使用一個(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(下文簡稱RocketMQ-Spring)就是一個(gè)支持Spring Messaging API標(biāo)準(zhǔn)的項(xiàng)目。該項(xiàng)目把RocketMQ的客戶端使用Spring Boot的方式進(jì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é)請Spring社區(qū)的同學(xué)對RocketMQ-Spring代碼進(jìn)行review,引出一段羅美琪(RocketMQ)和春波特(Spring Boot)故事的佳話[1],著名Spring布道師Josh Long向國外同學(xué)介紹如何使用RocketMQ-Spring收發(fā)消息[2]。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ā)人員的代碼只需要針對應(yīng)用內(nèi)核提供的固定的接口和注解方式進(jìn)行編程,而不需要關(guān)心運(yùn)行時(shí)具體的Binder綁定的消息中間件。

在運(yùn)行時(shí),Spring Cloud Stream能夠自動(dòng)探測并使用在classpath下找到的Binder。這樣開發(fā)人員可以輕松地在相同的代碼中使用不同類型的中間件:僅僅需要在構(gòu)建時(shí)包含進(jìn)不同的Binder。在更加復(fù)雜的使用場景中,也可以在應(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[3],其主要實(shí)現(xiàn)原理是把發(fā)送消息最終代理給了RocketMQ-Spring的RocketMQTemplate,在消費(fèi)端則內(nèi)部會啟動(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)[4],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)和使用場景。

RocketMQ-Spring

特點(diǎn):

  • 作為起步依賴,簡單引入一個(gè)包就能在Spring生態(tài)用到RocketMQ客戶端的所有功能。
  • 利用了大量自動(dòng)配置和注解簡化了編程模型,并且支持Spring Messaging API。
  • 與RocketMQ 原生Java SDK的功能完全對齊。

使用場景:

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

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)都是非常棒。

使用場景:

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

Spring Cloud Bus RocketMQ

特點(diǎn):

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

使用場景:

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

Spring Cloud Data Flow

特點(diǎn):

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

使用場景:

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

Spring Cloud Function

特點(diǎn):

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

使用場景:

  • Serverless場景。

本文整體介紹了在Spring生態(tài)中接入RockeMQ的5種方法,讓各位開發(fā)者對幾種經(jīng)典場景有宏觀的了解。后續(xù)會有專欄詳細(xì)介紹上述各個(gè)項(xiàng)目的具體使用方法和應(yīng)用場景,真正地在Spring生態(tài)中玩轉(zhuǎn)RocketMQ!點(diǎn)擊“閱讀原文”直達(dá)知行動(dòng)手實(shí)驗(yàn)室,直接上手體驗(yàn)3個(gè)最常用的在Spring生態(tài)中接入RocketMQ的方式。

原文鏈接

本文為阿里云原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。

?

總結(jié)

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

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