ActiveMQ学习笔记(2)——JMS消息模型
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
1.1 JMS模型簡(jiǎn)介
JMS支持兩種消息通信模型:
點(diǎn)對(duì)點(diǎn)模型(Point to Point,P2P)
發(fā)布者/訂閱者模型(publish/subscribe, ?pub/sub)
P2P模型中,Sender把一個(gè)消息發(fā)送到Queue中,這個(gè)消息只能由一個(gè)客戶端消費(fèi);一旦消息被消費(fèi),其它客戶端就不能從這個(gè)Queue中獲取到消息。巧克力糖盒子里只有一塊糖,只有最先打開(kāi)的那個(gè)人能吃到,后來(lái)的人就吃不到了。
Pub/Sub模型中,一個(gè)消息主題(Topic)被發(fā)布以后,可以有多個(gè)訂閱者收聽(tīng),這些訂閱者都可以獲取到消息;前提是,訂閱者訂閱了這個(gè)主題,并且只能接受訂閱以后的消息。這就像生活里的期刊訂閱,我們只能收到訂閱以后的期刊,之前的期刊,雜志社是不可能投遞給我們的。
1.2點(diǎn)對(duì)點(diǎn)模型
只有一個(gè)消費(fèi)者
? ? ?每條消息只有一個(gè)消費(fèi)者,如果這條消息被消費(fèi),那么其它消費(fèi)者不能接受到此消息。
? 時(shí)間無(wú)關(guān)性
? ? ? ?消息的消費(fèi)和時(shí)間無(wú)關(guān),只要消息被發(fā)送了,在消息過(guò)期之前,如果沒(méi)有其他消費(fèi)者消費(fèi)了這個(gè)消息,那么客戶端可以在任何時(shí)候來(lái)消費(fèi)這條消息。
消費(fèi)者必須確認(rèn)
? ? ? ?消費(fèi)者收到消息之后,必須向Message Provider確認(rèn),否則會(huì)被認(rèn)為消息沒(méi)有被消費(fèi),仍然可以被其他消費(fèi)者消費(fèi)。可以設(shè)置自動(dòng)確認(rèn)。這個(gè)特點(diǎn)其實(shí)也是保證一條消息只能由一個(gè)消費(fèi)者來(lái)消費(fèi)。
非持久化的消息只發(fā)一次
非持久化的消息,可能會(huì)丟失,因?yàn)橄?huì)過(guò)期,另外Message Provider可能宕機(jī)。
持久化的消息嚴(yán)格發(fā)一次
消息可以被持久化,比如持久化在文件系統(tǒng)或者數(shù)據(jù)庫(kù)中,這樣可以避免Message Provider的異常或者其它異常導(dǎo)致消息丟失。
????????
1.3發(fā)布者/訂閱者模型
每條消息可以有多個(gè)訂閱者
訂閱者只能消費(fèi)它們訂閱topic之后的消息
非持久化訂閱,訂閱者必須保持為活動(dòng)狀態(tài)才能使用這些消息,如果一個(gè)訂閱者A斷開(kāi)了10分鐘,那么A就會(huì)收不到這10分鐘內(nèi)的消息。
持久化訂閱,Message Provider會(huì)保存這些消息,即使訂閱者因?yàn)榫W(wǎng)絡(luò)原因斷開(kāi)了,再重新連接以后,能讓消費(fèi)這些消息。
是否使用持久化訂閱,需要根據(jù)業(yè)務(wù)場(chǎng)景判斷。
轉(zhuǎn)載于:https://my.oschina.net/xiaoxishan/blog/378752
總結(jié)
以上是生活随笔為你收集整理的ActiveMQ学习笔记(2)——JMS消息模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JBoss配置详解
- 下一篇: 【svn】设置过滤文件