一.消息隊列
1.概述
- 消息隊列中間件是分布式系統(tǒng)中重要的組件寨躁,主要解決應(yīng)用耦合宪卿,異步消息,流量削鋒等問題烟瞧。
- 實現(xiàn)高性能畴蒲,高可用悠鞍,可伸縮和最終一致性架構(gòu)。是大型分布式系統(tǒng)不可缺少的中間件模燥。
- 目前在生產(chǎn)環(huán)境咖祭,使用較多的消息隊列有ActiveMQ,RabbitMQ蔫骂,ZeroMQ心肪,Kafka,MetaMQ纠吴,RocketMQ等硬鞍。
2.消息隊列應(yīng)用場景
(1)異步處理
場景說明:用戶注冊后,需要發(fā)注冊郵件和注冊短信戴已。傳統(tǒng)的做法如下兩種:
1)串行方式
將注冊信息寫入數(shù)據(jù)庫成功后固该,發(fā)送注冊郵件,再發(fā)送注冊短信糖儡。以上三個任務(wù)全部完成后伐坏,返回給客戶端。
簡圖:
2)并行方式
將注冊信息寫入數(shù)據(jù)庫成功后握联,發(fā)送注冊郵件的同時桦沉,發(fā)送注冊短信。以上三個任務(wù)完成后金闽,返回給客戶端纯露。與串行的差別是,并行的方式可以提高處理的時間代芜。
原理圖:
3)引入消息隊列埠褪,將不是必須的業(yè)務(wù)邏輯,異步處理。
改造后的架構(gòu)如下:
二.ActiveMQ
1.JMS簡介
(1)JMS即Java消息服務(wù)钞速,是JavaEE的13規(guī)范之一贷掖,是一套面向消息中間件(MOM)的應(yīng)用程序接口。用在兩個程序之間渴语,或分布式系統(tǒng)中發(fā)送消息苹威,進行異步通信。
(2)JMS使我們能夠通過消息收發(fā)服務(wù)(也可以稱為驾凶,消息中介程序或路由器)從一個JMS客戶機向另一個JMS客戶機發(fā)送消息牙甫。消息是JMS中的一種類型對象,由兩部分組成:報頭和消息主體狭郑。報頭由路由信息以及有關(guān)該消息的元數(shù)據(jù)組成腹暖。消息主體則攜帶著應(yīng)用程序的數(shù)據(jù)或有效負載汇在。根據(jù)有效負載的類型來劃分翰萨,消息可分為多種,它們分別攜帶:簡單文本消息糕殉、可序列化的對象亩鬼、屬性集合、字節(jié)流阿蝶、原始值流雳锋、無有效負載消息。
2.ActiveMQ簡介
ActiveMQ出身名門羡洁,是Apache門下的最流行的玷过,能力強勁的開源消息總線。
完全支持JMS1.1和J2EE1.4規(guī)范的JMS Provide實現(xiàn)筑煮。它從設(shè)計上保證了高性能的集群辛蚊,當然實現(xiàn)了JMS的P2P與PubSub兩種開發(fā)模式。
3.P2P開發(fā)模式實戰(zhàn)
(1)并導(dǎo)入ActiveMQ的核心jar包
(2)創(chuàng)建消息生產(chǎn)者類:JMSProducer
用戶下單后真仲,訂單系統(tǒng)需要通知庫存系統(tǒng)袋马。傳統(tǒng)的做法是,訂單系統(tǒng)調(diào)用庫存系統(tǒng)的接口秸应。
(3)創(chuàng)建消息消費者類:JMSConsumer
4.PubSub開發(fā)模式實戰(zhàn)
P2P的模式相當于一個消息生產(chǎn)者一個消費者虑凛,PubSub中可以有一個消息發(fā)布者多個消息訂閱者,開發(fā)與P2P幾乎一樣软啼,只是將createQueue(創(chuàng)建消息隊列)改為了createTopic(創(chuàng)建主題)桑谍;生產(chǎn)消息改為了發(fā)布消息;接收消息改為了訂閱消息
5.總結(jié)
ActiveMQ是JMS規(guī)范的一個實現(xiàn)產(chǎn)品祸挪,主要用在兩個程序之間霉囚,或分布式系統(tǒng)中發(fā)送消息,進行異步通信∮蓿可以用它來解決高并發(fā)的問題榜跌,或者分布式事務(wù)的問題等。