正式介紹activeMQ之前违崇,讓我們先了解幾個(gè)名詞
一凫岖、JMS消息服務(wù)
即java的消息服務(wù)娶视,JMS的客戶端之間通過(guò)JMS進(jìn)行異步的消息傳輸
1.消息模型
P2P point to point 點(diǎn)對(duì)點(diǎn)模式
Pub/Sub publish/Subscribe 發(fā)布訂閱模式
每個(gè)消息被發(fā)送到隊(duì)列叮喳,接收者從隊(duì)列獲取消息。隊(duì)列里一直保留消息巨柒,直到消息被消費(fèi)或超時(shí)樱拴。
P2P特點(diǎn):
- 每個(gè)消息只能有一個(gè)消費(fèi)者,一旦消費(fèi)洋满,即不在隊(duì)列中
- 發(fā)送者和接收者不存在依賴性
- 接收者在接收成功后晶乔,要向隊(duì)列應(yīng)答成功。無(wú)特殊配置時(shí)牺勾,默認(rèn)自動(dòng)commit
使用場(chǎng)景:希望每個(gè)消息都被成功處理正罢,且只有一個(gè)消費(fèi)者
多個(gè)發(fā)布者將消息發(fā)送到主題,系統(tǒng)將消息傳遞給多個(gè)訂閱者
Pub/Sub特點(diǎn)
- 每個(gè)消息可以有多個(gè)消費(fèi)者
- 發(fā)布和訂閱有時(shí)間上依賴性驻民,針對(duì)某個(gè)topic翻具,要先創(chuàng)建一個(gè)訂閱者才能消費(fèi)消息,且訂閱者必須保持運(yùn)行狀態(tài)
- 為緩和這種嚴(yán)格的時(shí)間相關(guān)性川无,JMS允許訂閱者創(chuàng)建一個(gè)可持久化的訂閱呛占。這樣虑乖,即使訂閱者沒(méi)有被激活(運(yùn)行)懦趋,它也能接收到發(fā)布者的消息。
使用場(chǎng)景:
如果你希望發(fā)送的消息可以不被做任何處理疹味、或者被一個(gè)消息者處理仅叫、或者可以被多個(gè)消費(fèi)者處理的話,那么可以采用Pub/Sub模型
2.消息如何消費(fèi)
1).同步:調(diào)用使用receive方法糙捺,此方法在接收到消息之前會(huì)一直阻塞
2).異步:注冊(cè)消息監(jiān)聽(tīng)器诫咱,消息到達(dá)時(shí),系統(tǒng)自動(dòng)調(diào)用監(jiān)聽(tīng)器的onMessage方法
二洪灯,消息隊(duì)列中間件
1坎缭,應(yīng)用場(chǎng)景
(1) 異步處理
例如:注冊(cè)后發(fā)送短信、郵件签钩,下單后調(diào)用第三方支付接口等掏呼,將需要執(zhí)行的消息放入隊(duì)列,客戶端會(huì)迅速收到響應(yīng)铅檩,有利于用戶體驗(yàn)
(2)應(yīng)用解耦
例如:在業(yè)務(wù)復(fù)雜的項(xiàng)目里憎夷,一個(gè)請(qǐng)求涉及跨系統(tǒng),跨接口操作昧旨,當(dāng)?shù)谌绞案⒌谒姆较到y(tǒng)網(wǎng)絡(luò)異常等時(shí)祥得,導(dǎo)致請(qǐng)求失敗,耦合太強(qiáng)蒋得。
(3)流量削鋒
例如:秒殺活動(dòng)级及,秒殺時(shí)不做業(yè)務(wù)處理,交給消息隊(duì)列额衙,并限制消息隊(duì)列的長(zhǎng)度创千,可有效控制參與人數(shù)并防止高流量壓垮應(yīng)用
(4)日志處理
例如:kafka應(yīng)用,日志采集寫入kafka隊(duì)列入偷,此隊(duì)列復(fù)雜接收追驴,存儲(chǔ)和轉(zhuǎn)發(fā),訂閱者訂閱kafka里的日志數(shù)據(jù)
(5)消息通訊
如:消息室疏之,微博等