999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

RabbitMQ消息中間件在Spring Boot教學中的應用

2020-02-22 03:09:35唐權周蓉張勇
現代信息科技 2020年18期

唐權 周蓉 張勇

摘? 要:文章對消息中間件的基本工作原理進行了研究,分析了消息中間件的異步處理應用場景,詳細研究了消息中間件RabbitMQ工作原理及工作模式,在Spring Boot教學項目中整合RabbitMQ消息中間件技術,實現業務邏輯前后臺分離的異步處理方式,提供了消息中件間在Spring Boot項目中的解決方案。

關鍵詞:RabbitMQ;消息中間件;Spring Boot

中圖分類號:TP393;TP391 ? ? ? 文獻標識碼:A 文章編號:2096-4706(2020)18-0125-03

Abstract:This paper studies the basic working principle of message middleware,analyzes the application scenarios of asynchronous processing of message middleware,studies the working principle and working mode of RabbitMQ in detail,integrates RabbitMQ middleware technology in the teaching project of Spring Boot,realizes the asynchronous processing mode of separating business logic from background,and provides a solution for the message middleware in the Spring Boot project.

Keywords:RabbitMQ;message middleware;Spring Boot

0? 引? 言

JavaEE輕量級應用程序的開發是我校軟件技術專業高年級很重要的核心專業課程,該課程綜合性很強,經常引入第三方軟件整合到框架中解決實際復雜問題。例如:引入Spring MVC框架解決模型層、表示層、控制層業務邏輯分離與控制問題;引入MyBatis框架解決數據庫訪問層的對象關系映射(ORM)問題等。同樣在JavaEE項目中會遇到這樣的問題:業務的處理過程涉及不同的業務流程,各個流程之間進行通信和數據交互,如果不同的流程處于不同的系統中還涉及遠程調用。采用傳統模式,兩個流程之間會形成一種同步機制,滿足一定的邏輯關系與時間順序,在執行過程中存在相互制約,影響程序執行效率與響應速度。為了解決這種不同業務流程之間的通信與數據交互,就需要引入第三方消息中間件,實現系統的異步通信、應用解耦、流量削峰、分布式事務管理,以解決不同系統之間的信息的產生與消息消費異步實現機制,大幅提升了程序的運行效率及響應速度。在教學項目中對掌握消息中間件技術,理解消息中間件的工作原理及應用場景,應用消息中間件實現消息通信具有非常重要的作用。

1? 消息中間件

1.1? 消息中間件工作原理

消息中間件是基于隊列與消息傳遞技術,在網絡環境中為應用系統提供同步或異步、可靠的消息傳輸的支撐性軟件系統[1]。消息中間件的由消息代理服務器(Broker)、消息生產者(Producer)、消息消費者(Consumer)、主題(Topic)、消息隊列(Queue)、消息體(Message)組成。

消息中間件的工作原理:系統A作為消息生產者把消息發布到消息中間件服務器的消息匯集地,形成不同消息隊列,供系統B的消費者使用的過程,其工作原理如圖1所示。在業務流程中加入消息服務中間后,系統A與系統B不直接發生聯系,形成了系統A→Broker和Broker→B兩個獨立的過程,完成A→B的異步通信,實現A的業務邏輯與B的業務邏輯解耦。

1.2? 消息中間件的應用場景

消息中間件可以在實際開發中應用于異步處理、應用解耦、流量削峰、分布式事務處理場景,提升響應速度,解決相互依賴,實現過載保護、冗余性和可恢復性。下文以異步處理機制來詳細說明消息中間件的應用場景。

在客戶交易業務邏輯中,完成交易后對數據庫進行更新,然后還要把該交易信息通過短信和電子郵件的方式發送給客戶,處理以上的業務有三種方式可以選擇:

(1)串行處理方式:包括三個順序業務邏輯,交易數據寫入數據庫→向客戶發送交易郵件→向客戶發送交易短消息,整個業務響應所消耗的時間是三個業務邏輯所需時間之和,即為90 ms,如圖2所示。

(2)并行處理方式:把向客戶發送交易郵件與發送交易短消息兩個業務邏輯通過多線程并行處理,其他業務邏輯不變,整個業務響應消耗的時間是數據寫入數據庫的耗時與后面兩個并行業務邏輯耗時最長的一個之和,即為60 ms,如圖3所示。

(3)消息中間件處理方式:將交易數據寫入數據庫,引入消息中間件把消息快速推送到消息服務器的隊列中后,結束前臺交易邏輯,發送交易郵件與發送交易短消息由后臺交易業務配合消息中間件完成,響應業務的時間縮短為35 ms,工作流程如圖4所示。

通過異步處理應用場景的分析,消息中間件異步處理方式最節省時間,耗時為35 ms,響應用戶的請求最及時。在多用戶、大流量的場景中,提高業務的響應速度具有極其重要的作用,直接影響應用程序的性能,可提升用戶的使用體驗與黏合度。在業務中把即時性要求高的業務流程放在前臺處理,把對時間不太敏感的業務,通過引入消息中間件作為后臺業務處理,實現業務分離,提升應用程序對客戶請求的響應速度,從而提高應用程序的處理效率。常用的開源消息中間有ActiveMQ、RabbitMQ、Kafka、RocketMQ,在項目的開發中可根據項目的需求特點,選擇合適的消息隊列中間件。

2? RabbitMQ消息中間件

2.1? RabbitMQ消息中間件工作原理

RabbitMQ是基于AMQP(Advanced Message Queuing Pro-tocol)的輕量級、可靠、可伸縮和可移植消息代理,在Spring Boot項目中通過AMQP協議與RabbitMQ通信,進行集成化管理[2]。其工作原理是消息發布者向RabbitMQ代理服務器發送消息,代理服務器內部的交換器接收信息,把消息傳遞到與交換器綁定(Binding)的消息隊列中并保存,消息消費者通過與消息代理服務器建立連接(Connection),然后從對應的消息隊列中取出消息進行處理的過程,其工作原理如圖5所示。

2.2? RabbitMQ消息中間件工作模式

RabbitMQ消息中間件根據不同的需求,提供了多種模式,主要包括工作隊列模式、發布訂閱模式、路由模式、通配符模式、RPC模式、Headers模式,其中最常用的四種工作模式的特點為:

(1)工作隊列模式:在該模式下使用內部默認的交換器把消息發送到唯一的消息隊列,該消息可供多個消費者使用,使用后消息被移出。這種模式適合于工作任務相同,但是工作任務較繁重的情況,把任務分給多個消息者輪流處理。

(2)發布訂閱模式:在中間件服務器設置一個fanout類型交換器,收到的消息不加以分類,全部分配到不同消息隊列加以存儲,然后由各自消息隊列關聯的消費者進行消費。這種模式適用于使用相同消息,但是工作任務不同的場景。

(3)路由模式:設置一個Direct類型交換器,指定不同的路由鍵值(Routing Key),根據鍵值不同對消息進行分類,把不同的消息分配到不同消息隊列供消費者使用。這種模式適用于不同任務處理不同消息的場景。

(4)通配符模式:功能路由模式類型基本相同,只是路由鍵值中包含有通配符,可組成動態路由,具有靈活性。

3? Spring Boot整合RabbitMQ

3.1? RabbitMQ環境配置

RabbitMQ是第三方消息中間件,具有獨立性,在項目中引入消息中間件首先要安裝RabbitMQ消息中間件到服務器,使其成為一個獨立的服務程序,RabbitMQ環境設計及相關參數配置為:

(1)安裝Erlang語言包:RabbitMQ消息中間件需要Erlang語言包的支持,所以在安裝RabbitMQ前需要安裝Erlang語言包,根據不同版本選擇32位或64位Erlnag語言包進行安裝。

(2)安裝RabbitMQ:下載并安裝RabbitMQ消息中間件,配置ERLANG_HOME為Erlang語言包的安裝路徑。

(3)RabbitMQ端口:RabbitMQ消息中間件默認有兩個端口號5672和15672,其中5672作為服務端口,供應用程序訪問,另外一個端口是RabbitMQ的可視化界面的端口,可以通過http://localhost:15672進入可視化界面查看消息中間件服務器各個元素的數據及變化。

(4)用戶登錄名及密碼:通過兩個端口訪問消息中間件都要通過用戶名與密碼登錄,系統默認的用戶名與密碼都是guest,登錄系統后可以配置用戶及密碼。

3.2? 基于Spring Boot配置類模式整合應用

項目基于Spring Boot的配置類模式,就RabbitMQ的發布訂閱工作模式來闡述Spring Boot中對消息中間件RabbitMQ整合與應用。其完成的任務就是系統A通過RabbitMQ發送兩條消息,兩個不同的任務在系統B通過消息中間件使用該消息。

3.2.1? 創建Spring Boot項目并連接消息中間件

選擇Spring Intializr創建項目并選擇Messaging→Spring for RabbitMQ依賴包。在application.properties全局文件中配置已經安裝好的RabbitMQ的連接屬性。

spring.rabbitmq.host=127.0.0.1

spring.rabbitmq.port=5672

spring.rabbitmq.username=guest

spring.rabbitmq.password=guest

3.2.2? 創建配置類完成以下任務

(1)定義消息置換器:

@Bean[3]

Public MessageConverter msgcnv(){ Return new Jackson2sonMessageConverter(); }

(2)定義消息中間件交換器類型為fanout:

@Bean

Public Exchang fanout_x(){

return ExchangeBuilder.fanoutExchange(“fanout_x”).build() ;}

(3)定義兩個消息隊列:

@Bean

public Queue fanout_q_em(){return new Queue(“fanout_q_em”);}

@bean

Public Queue fanout_q_ms(){return new Queue(“fanout_q_ms”);}

(4)將消息對列與交換器綁定:

@Bean

public Binding bindem(){

return BindingBuilder.bind(fanout_q_em()).to(fanout_x()).with("").noargs(); }

@Bean

public Binding bindsm(){

return? BindingBuilder.bind(fanout_q_sm()).to(fanout_x()).with("").noargs();}

3.2.3? 測試類實現A系統發送消息到消息中間件

在項目中創建測試類,構建交互信息,通過rabbit Template把消息發送到消息服務器:

public void sendMQ() {user.setId(1001); user.setName("張三");

user.setMessage("*交易成功"); user.setPhone("13*25897 521");

rabbitTemplate.convertAndSend("fanout_x","",user); }

3.2.4? 服務類實現B系統接從消息中間件隊列接收信息

構建后臺處理類,通過Rabbit Listener監聽器,監聽消息隊列是否存在消息,如有就通過message對象取出消息進行處理:

Public class Rbmqreceivems {

@RabbitListener(queues = "fanout_q_sm")

public void consumersm(Message message){byte[] msbody =message.getBody();

String ms=new String(msbody);System.out.println("接收到的短信消息:"+ms);? }}

同樣可以定義一個發送電子郵件的隊列監聽器,監聽郵件消息中隊列的變化,如有消息產生就觸發電子郵件的發送。通過上面的操作,然后通過RabbitMQ的可視化界面查詢消息的產生與消費的過程。

4? 結? 論

本文通過對消息中間件的原理分析,幫助學生深刻理解消息中間件在企業級開發中的應用場景。RabbitMQ是一款非常流行的,基于AMQP協議的開源消息中間件,具有較好的數據一致性、穩定性和可靠性,成功地把RabbitMQ與Spring Boot技術整合在項目中,可非常方便地實現面向消息中間件的應用與開發,并應用于JavaEE企業級開發的教學過程中。

參考文獻:

[1] 全國信息技術標準化技術委員會(SAC/TC 28).信息技術中間件消息中間件技術規范:GB/T 28168—2011 [S].北京:中國標準出版社,2011.

[2] 黑馬程序員.SpringBoot企業級開教程 [M].北京:人民郵電出版社,2019.

[3] 汪云飛.Java EE開發的顛覆者 Spring Boot實戰 [M].北京:電子工業出版社,2010.

作者簡介:唐權(1971—),男,漢族,四川遂寧人,副教授,碩士,研究方向:軟件技術與理論、中間件、信息安全;周蓉(1969—),女,漢族,四川遂寧人,教授,碩士,研究方向:計算機應用技術、網絡技術;張勇(1970—),男,漢族,四川遂寧人,教授,博士,研究方向:數據庫技術、網絡技術。

主站蜘蛛池模板: 美女内射视频WWW网站午夜 | 亚洲清纯自偷自拍另类专区| 日韩欧美色综合| 久久亚洲国产最新网站| 久久国产av麻豆| 欧美精品伊人久久| 欧美成人怡春院在线激情| 国产尤物视频网址导航| www.91中文字幕| 国产自在线拍| 日本午夜视频在线观看| 日本91在线| 免费看av在线网站网址| 午夜成人在线视频| 久久这里只精品国产99热8| 91国语视频| 最新国产精品第1页| swag国产精品| 亚洲AV免费一区二区三区| 无码精品福利一区二区三区| 91久久青青草原精品国产| 亚国产欧美在线人成| 欧美成人免费一区在线播放| 国产黄在线免费观看| a级毛片毛片免费观看久潮| 欧美日韩在线亚洲国产人| 国产欧美专区在线观看| 国内精品九九久久久精品| 久久久久久国产精品mv| 久久精品这里只有国产中文精品| 永久免费无码成人网站| 日韩在线视频网| 亚洲综合第一页| 亚洲最新在线| 欧美午夜一区| 毛片网站免费在线观看| 99九九成人免费视频精品| 欧美亚洲另类在线观看| 国产18在线| 一级毛片在线免费看| 777午夜精品电影免费看| 美女被操黄色视频网站| 亚洲成av人无码综合在线观看| 久综合日韩| 欧美精品在线视频观看| 国产福利小视频在线播放观看| 日本免费高清一区| 亚洲第一网站男人都懂| 永久在线精品免费视频观看| 国产在线精品美女观看| 精品少妇人妻一区二区| 人妻免费无码不卡视频| 国产亚洲第一页| 欧美精品1区| 日韩欧美国产另类| a毛片免费观看| 亚洲天堂成人在线观看| 欧美一级夜夜爽| 女人爽到高潮免费视频大全| 欧美精品在线免费| 精品国产网站| 很黄的网站在线观看| 热99精品视频| 丰满少妇αⅴ无码区| 99精品国产高清一区二区| 国产永久在线视频| 国产亚洲精久久久久久久91| 久久国产亚洲偷自| 亚洲精品人成网线在线| 一本色道久久88| 欧美高清日韩| 无码av免费不卡在线观看| 国产欧美日韩综合在线第一| 久久黄色免费电影| 色亚洲激情综合精品无码视频| 国产又色又刺激高潮免费看| 国产欧美精品专区一区二区| 国产精品吹潮在线观看中文| 99ri精品视频在线观看播放| 国产毛片高清一级国语| 亚洲九九视频| 伊人狠狠丁香婷婷综合色|