怎么用Spring-boot-starter標(biāo)準(zhǔn)改造項(xiàng)目?jī)?nèi)的RocketMQ客戶端組件

這篇文章主要講解了“怎么用Spring-boot-starter標(biāo)準(zhǔn)改造項(xiàng)目?jī)?nèi)的RocketMQ客戶端組件”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“怎么用Spring-boot-starter標(biāo)準(zhǔn)改造項(xiàng)目?jī)?nèi)的RocketMQ客戶端組件”吧!

成都創(chuàng)新互聯(lián)公司專注于企業(yè)全網(wǎng)整合營(yíng)銷推廣、網(wǎng)站重做改版、軹城網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁(yè)面制作、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為軹城等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

一、背景介紹

我們?cè)谑褂肧pring Cloud全家桶構(gòu)建微服務(wù)應(yīng)用時(shí),經(jīng)常能看到spring-boot-xxx-starter的依賴,像spring-boot-starter-web、spring-cloud-starter-feign、spring-boot-starter-test、mybatis-spring-boot-starter,仿佛只要帶上starter的東西,你就擁有了這個(gè)組件的一切,包括所有的配置,引用類都搞定了,這樣一個(gè)神奇的拿來(lái)就用的東西,是怎么實(shí)現(xiàn)的呢?我們自己能不能把自己的工具包做成一個(gè)starter?

二、Spring Boot Starter組件規(guī)范

  • 命名規(guī)范

groupId:這個(gè)標(biāo)簽的命名沒(méi)做太多要求,基本上使用公司域名+項(xiàng)目名方式,如官方一般使用org.springframework.cloud,第三方一般用自己公司域名,如org.mybatis.spring.boot。 artifactId:這個(gè)標(biāo)簽的命名Spring官方給了建議命名方式,Spring官方自己發(fā)布的組件,命名方式是spring-boot-starter-xxx,xxx表示組件名稱,像上文提及的spring-boot-starter-web和spring-cloud-starter-feign;第三方開發(fā)的組件,命名方式是xxx-spring-boot-starter,如mybatis-spring-boot-starter。

  • 工程規(guī)范

以maven工程為例,Spring Boot Starter用多模塊方式建立工程,工程內(nèi)有autoconfigure模塊和starter模塊。 autoconfigure模塊為自動(dòng)配置模塊,里面包含配置加載,全部的功能代碼實(shí)現(xiàn)及需要引用的jar包,負(fù)責(zé)對(duì)內(nèi)功能實(shí)現(xiàn),所有的代碼開發(fā)都在這個(gè)模塊中完成。 starter模塊提供自動(dòng)配置模塊的依賴,里面沒(méi)有代碼,是個(gè)空jar包,只有對(duì)autoconfigure模塊的所有引用,是一個(gè)依賴集,它的目的是簡(jiǎn)化使用該組件時(shí)的依賴,只要添加starter模塊,就能使用整個(gè)starter組件。

三、案例實(shí)戰(zhàn)

我們以常用的RocketMQ客戶端組件為例,搭建一個(gè)自己定義的starter,RocketMQ是由阿里巴巴團(tuán)隊(duì)開發(fā)并捐贈(zèng)給apache團(tuán)隊(duì)的優(yōu)秀消息中間件,承受過(guò)歷年雙十一大促的考驗(yàn)。

  1. 創(chuàng)建一個(gè)Maven工程,增加兩個(gè)模塊rocketmq-spring-boot-autoconfigure和rocketmq-spring-boot-starter,這里使用的RocketMQ版本為4.5.2,主pom.xml節(jié)選如下:

<groupId>com.hy.demo</groupId>
<artifactId>rocketmq</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>

<modules>
	<module>rocketmq-spring-boot-autoconfigure</module>
	<module>rocketmq-spring-boot-starter</module>
</modules>

<dependencies>
	<dependency>
		<groupId>org.apache.commons</groupId>
		<artifactId>commons-lang3</artifactId>
		<version>3.3.2</version>
	</dependency>
	<dependency>
		<groupId>org.apache.rocketmq</groupId>
		<artifactId>rocketmq-client</artifactId>
		<version>4.5.2</version>
	</dependency>
	<dependency>
		<groupId>org.projectlombok</groupId>
		<artifactId>lombok</artifactId>
		<scope>provided</scope>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>5.1.8.RELEASE</version>
		<scope>compile</scope>
	</dependency>
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-api</artifactId>
	</dependency>
</dependencies>
  1. autoconfigure模塊開發(fā) src目錄下添加相應(yīng)的工具類,如注解,配置類,接口等,略 添加定位配置侯選類,在META-INF/目錄下新建spring.factories文件:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.hy.demo.rocketmq.MQConfig

Spring Boot會(huì)檢查你發(fā)布的jar中是否存在META-INF/spring.factories文件,自動(dòng)配置類只能通過(guò)這種方式加載

  1. starter模塊開發(fā) 只需要修改pom.xml文件即可:

<parent>
	<artifactId>rocketmq</artifactId>
	<groupId>com.hy.demo</groupId>
	<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>rocketmq-spring-boot-starter</artifactId>

<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>com.hy.demo</groupId>
			<artifactId>rocketmq</artifactId>
			<version>1.0-SNAPSHOT</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

<dependencies>
	<dependency>
		<groupId>com.hy.demo</groupId>
		<artifactId>rocketmq-spring-boot-autoconfigure</artifactId>
		<version>1.0-SNAPSHOT</version>
	</dependency>
</dependencies>

在IDEA上對(duì)該工程進(jìn)行編譯,打包,命令:

clean install -DskipTests=true

4、打包部署完成后,在應(yīng)用模塊里添加該starter的依賴即可

<dependency>
   <groupId>com.hy.demo</groupId>
   <artifactId>rocketmq-spring-boot-starter</artifactId>
   <version>1.0-SNAPSHOT</version>
</dependency>

注:因?yàn)镽ocketMQ組件較為通用,目前提供基本的幾種發(fā)送和接收消息的方式,支持事務(wù)消息,文章內(nèi)就不一一解釋代碼功能,附上此次源碼地址:

rocketmq-spring-boot-starter源碼示例

四、知識(shí)點(diǎn)梳理

  1. Spring的幾個(gè)注解: @Import用來(lái)整合所有在@Configuration注解中定義的Bean配置; @EventListener 事件監(jiān)聽(tīng),里面寫的ContextStartedEvent,表示監(jiān)聽(tīng)Spring上下文啟動(dòng)完成后的事件; @Configuration相當(dāng)于xml的beans標(biāo)簽; @Bean標(biāo)注在方法上,等同于xml的bean;

  2. 自定義注解@MQConsumer和注解@MQTransactionProducer是如何起作用的? 工程里定義了com.hy.demo.rocketmq.config.RocketMQAnnotationScan類對(duì)這兩個(gè)注解進(jìn)行掃描,利用注解@EventListener(ContextStartedEvent.class),監(jiān)聽(tīng)Spring上下文初始化事件,然后從Spring容器內(nèi)讀取所有帶這兩個(gè)注解的類,把RocketMQ相關(guān)的配置信息加載進(jìn)去,由于事務(wù)消息生產(chǎn)者類org.apache.rocketmq.client.producer.TransactionMQProducer的特殊性(它需要在初始化時(shí)注入TransactionListener監(jiān)聽(tīng)類,與應(yīng)用模塊有一定耦合性),所以增加了一個(gè)Map集合存儲(chǔ)應(yīng)用模塊內(nèi)所有使用了@MQTransactionProducer注解的實(shí)例。

感謝各位的閱讀,以上就是“怎么用Spring-boot-starter標(biāo)準(zhǔn)改造項(xiàng)目?jī)?nèi)的RocketMQ客戶端組件”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)怎么用Spring-boot-starter標(biāo)準(zhǔn)改造項(xiàng)目?jī)?nèi)的RocketMQ客戶端組件這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

網(wǎng)頁(yè)題目:怎么用Spring-boot-starter標(biāo)準(zhǔn)改造項(xiàng)目?jī)?nèi)的RocketMQ客戶端組件
路徑分享:http://muchs.cn/article44/iejcee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、做網(wǎng)站、定制開發(fā)、商城網(wǎng)站、關(guān)鍵詞優(yōu)化、建站公司

廣告

聲明:本網(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)

營(yíng)銷型網(wǎng)站建設(shè)