KET 在線
模擬測(cè)試
小程序在線模擬測(cè)試
PET 真實(shí)
考場(chǎng)模擬
OPFUN Talk萌課堂,專注青少在線語言啟蒙!——寰宇咨詢中心資訊網(wǎng)
上海 18761612306
簡(jiǎn)介:本文將 rocktmq-spring-boot 簡(jiǎn)單介紹一下設(shè)計(jì)實(shí)現(xiàn),讀者可以通過這篇文章了解一下。 RocketMQ Client 端集變成 spring-boot-starter 開發(fā)框架的細(xì)節(jié),通過一個(gè)簡(jiǎn)單的例子,我們將一步一步地解釋如何使用這個(gè)例子 spring-boot-starter 配備工具包,發(fā)送和消費(fèi) RocketMQ 消息。
在 Spring 生態(tài)中玩轉(zhuǎn) RocketMQ 系列文章:
《怎樣在 Spring 生態(tài)中玩轉(zhuǎn) RocketMQ?》
關(guān)于羅美琪和春波特的故事...》
《RocketMQ-Spring 畢業(yè)兩周年,為什么會(huì)變成? Spring 最受歡迎的生態(tài)學(xué) messaging 實(shí)現(xiàn)?》
通過這篇文章,你會(huì)知道:
Spring 新聞框架介紹
rocketmq-spring-boot 具體實(shí)現(xiàn)
使用示例
前言
上世紀(jì) 90 年底,隨之而來 Java EE(Enterprise Edition) 出現(xiàn),特別是 Enterprise Java Beans 應(yīng)用程序需要復(fù)雜的描述符配置和復(fù)雜的代碼實(shí)現(xiàn),增加了許多開發(fā)者的學(xué)習(xí)曲線和開發(fā)成本,這是建立在簡(jiǎn)單基礎(chǔ)上的 XML 配置和一般 Java 目標(biāo)(Plain Old Java Objects)的 Spring 技術(shù)應(yīng)時(shí)而生,依賴注入(Dependency Injection), 控制反轉(zhuǎn)(Inversion of Control)并且面向切面編程(AOP)技術(shù)更敏捷地解決了傳統(tǒng)問題 Java 公司和版本不足。
隨著 Spring 根據(jù)注釋的不斷演變,(Annotation)配置逐漸被取代 XML 文檔配備,2014 年 4 月 1 日,Spring Boot 1.0.0 正式發(fā)布,以“約定大于配置”為基礎(chǔ)(Convention over configuration)這個(gè)概念可以快速地開發(fā)、檢測(cè)、運(yùn)行和部署 Spring 應(yīng)用程序,并且可以簡(jiǎn)單地與各種啟動(dòng)器(例如 spring-boot-web-starter)結(jié)合起來,讓應(yīng)用程序直接以命令行的形式運(yùn)行,不再需要部署到單個(gè)容器中。這是一個(gè)簡(jiǎn)單、直接、快速地構(gòu)建和開發(fā)應(yīng)用的過程,可以通過協(xié)議配置和簡(jiǎn)化布局,受到越來越多開發(fā)者的歡迎。
為了運(yùn)用 Spring Boot 快速發(fā)展,使用戶能更加靈活地使用。 RocketMQ 消息客戶端,Apache RocketMQ 社區(qū)推出了 spring-boot-starter 實(shí)現(xiàn)。伴隨著分布式事務(wù)消息功能 RocketMQ 4.3.0 最近版本發(fā)布,相關(guān)版本升級(jí)。 spring-boot 代碼,支持分布式事務(wù)的回查和通過注釋發(fā)送事務(wù)信息。
本論文將簡(jiǎn)要介紹當(dāng)前的設(shè)計(jì)實(shí)現(xiàn)情況,讀者可以通過本文了解到 RocketMQ Client 端集變成 spring-boot-starter 開發(fā)框架的細(xì)節(jié),然后通過一個(gè)簡(jiǎn)單的例子,一步一步地解釋如何使用這個(gè)例子。 spring-boot-starter 配備工具包,發(fā)送和消費(fèi) RocketMQ 消息。
Spring 里面的新聞框架
1. Spring Messaging
2. Spring Cloud Stream
Spring Cloud Stream 融合了 Spring Integration 注釋及功能,其應(yīng)用模型如下:
通過這種方式,開發(fā)者可以很容易地將不同類型的中間件應(yīng)用到相同的代碼中:只需在構(gòu)建過程中包含不同的內(nèi)容。 Binder。在更復(fù)雜的使用場(chǎng)景中,還可以在使用中包裝多個(gè)。 Binder 并且讓它自己選擇 Binder,甚至在運(yùn)行過程中使用不同的通道。 Binder。
spring-boot-starter的實(shí)現(xiàn)
1. spring-boot-starter 的實(shí)現(xiàn)步驟
對(duì)于一個(gè) spring-boot-starter 實(shí)現(xiàn)需要包括以下幾個(gè)方面:
1)在 pom.xml 的概念
定義最終會(huì)產(chǎn)生 starter 部件信息
<groupId>org.apache.rocketmq</groupId><artifactId>spring-boot-starter-rocketmq</artifactId><version>1.0.0-SNAPSHOT</version>
定義依賴包
分為兩部分:Spring 自己的依賴包和 RocketMQ 的依賴包。
二是環(huán)境變量類
應(yīng)用特性環(huán)境變量類型的定義 RocketMQProperties,這個(gè) Bean 定義一組默認(rèn)屬性值。用戶正在使用最后一個(gè) starter 當(dāng)然,取值可以根據(jù)該類定義的屬性進(jìn)行修改,而不是直接修改該類配置,而是修改該類配置。 spring-boot 應(yīng)用中對(duì)應(yīng)的環(huán)境變量:src/main/resources/application.properties。
定義自動(dòng)加載類
定義 src/resources/META-INF/spring.factories 文件中的自動(dòng)加載類, 其目的是讓 spring boot 根據(jù)本文所指定的自動(dòng)配置類別,自動(dòng)初始化相關(guān) Bean、Component 或 Service,其內(nèi)容如下:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\org.apache.rocketmq.spring.starter.RocketMQAutoConfiguration
在 RocketMQAutoConfiguration 在類的具體實(shí)現(xiàn)中,對(duì)客戶直接使用的開放性定義 Bean 目標(biāo)包含:
RocketMQProperties 加載應(yīng)用特性環(huán)境變量的處理類;
RocketMQTemplate 發(fā)送方用戶發(fā)送消息的發(fā)送模板類;
四是最后具體進(jìn)行 RpcketMQ 有關(guān)的封裝
2. 實(shí)現(xiàn)了消息發(fā)送端
一般的發(fā)送端
發(fā)送代碼封裝在發(fā)送端 RocketMQTemplate POJO 下圖是發(fā)送端相關(guān)代碼的調(diào)用關(guān)系圖:
為了與 Spring Messaging 發(fā)送模板兼容,現(xiàn)在 RocketMQTemplate 集成了 AbstractMessageSendingTemplate 抽象類,支持相關(guān)消息轉(zhuǎn)換和發(fā)送方式,最終,這些方法將代理給予代理。 doSend() 方法、doSend() 以及 RocoketMQ 一些獨(dú)特的方法,如異步、單向和順序等,直接添加到其中 RoketMQTempalte 其中,這些方法直接被代理調(diào)用。 RocketMQ 的 Producer API 發(fā)送消息。
2)事務(wù)消息發(fā)送端
對(duì)事務(wù)消息的處理,在消息發(fā)送端進(jìn)行了部分?jǐn)U展,參照上面的調(diào)用關(guān)系類圖。
3. 實(shí)現(xiàn)消息消費(fèi)端
DefaultRocketMQListenerContainer 在器皿目標(biāo)中,器皿目標(biāo)將根據(jù)消費(fèi)方式(并發(fā)或順序)進(jìn)行, RocketMQListener 包裝到具體的 RocketMQ 實(shí)現(xiàn)內(nèi)部并發(fā)或順序接口。建立在容器中 RocketMQ Consumer 定制的目標(biāo)、啟動(dòng)和監(jiān)控 Topic 消息,如果有消費(fèi)消息,則回調(diào)至回調(diào)。 Listener 的 onMessage() 方法。
使用示例
上面一章已經(jīng)介紹過了 RocketMQ 在 spring-boot-starter 在這里,我們將通過一個(gè)最簡(jiǎn)單的消息發(fā)送和消費(fèi)的例子來介紹如何使這種方法。 rocketmq-spring-boot-starter。
1)啟動(dòng) NameServer 和 Broker
二是在實(shí)例中創(chuàng)建所需要的 Topics
執(zhí)行以下命令行操作,在執(zhí)行啟動(dòng)命令的目錄下執(zhí)行:
bash bin/mqadmin updateTopic -c DefaultCluster -t string-topic
2. 編譯 rocketmq-spring-boot-starter
目前的 spring-boot-starter 依賴于尚未提交的東西 Maven 核心數(shù)據(jù)庫,用戶需要自行下載 git 源代碼,然后執(zhí)行 mvn clean install 安裝在當(dāng)?shù)貍}庫。
git clone https://github.com/apache/rocketmq-externals.gitcd rocketmq-spring-boot-startermvn clean install
3. 編寫客戶端代碼
顧客若使用,則需在消息發(fā)布及消費(fèi)者端使用。 maven 環(huán)境變量 pom.xml 加入以下依賴:
特性 spring-boot-starter-rocketmq-version 的取值為:1.0.0-SNAPSHOT, 它與上一步安裝在本地倉庫的版本一致。
1)消息發(fā)送端代碼
發(fā)送端環(huán)境變量 application.properties:
發(fā)送端 Java 代碼:
二是消息消費(fèi)端代碼
消費(fèi)環(huán)境變量 application.properties:
消費(fèi)端 Java 代碼:
在此簡(jiǎn)單介紹一下使用情況。 spring-boot 為了編寫最基本的信息發(fā)送和接收代碼,如果需要了解更多的調(diào)用方法,例如: 異步發(fā)送,目標(biāo)信息體,指定 tag 請(qǐng)參考標(biāo)簽和指定事務(wù)信息。 github 描述文檔和詳細(xì)代碼。這些高級(jí)功能將在后續(xù)陸續(xù)介紹。
網(wǎng)站導(dǎo)航
熱點(diǎn)關(guān)注