ActiveMQ—Queue与Topic区别
Queue與Topic區(qū)別
轉(zhuǎn)自:http://blog.csdn.net/qq_21033663/article/details/52458305
隊(duì)列(Queue)和主題(Topic)是JMS支持的兩種消息傳遞模型:
? ? ? ? 1、點(diǎn)對(duì)點(diǎn)(point-to-point,簡(jiǎn)稱PTP)Queue消息傳遞模型:? ? ? ? 通過(guò)該消息傳遞模型,一個(gè)應(yīng)用程序(即消息生產(chǎn)者)可以向另外一個(gè)應(yīng)用程序(即消息消費(fèi)者)發(fā)送消息。在此傳遞模型中,消息目的地類型是隊(duì)列(即Destination接口實(shí)現(xiàn)類實(shí)例由Session接口實(shí)現(xiàn)類實(shí)例通過(guò)調(diào)用其createQueue方法并傳入隊(duì)列名稱而創(chuàng)建)。消息首先被傳送至消息服務(wù)器端特定的隊(duì)列中,然后從此對(duì)列中將消息傳送至對(duì)此隊(duì)列進(jìn)行監(jiān)聽(tīng)的某個(gè)消費(fèi)者。同一個(gè)隊(duì)列可以關(guān)聯(lián)多個(gè)消息生產(chǎn)者和消息消費(fèi)者,但一條消息僅能傳遞給一個(gè)消息消費(fèi)者。如果多個(gè)消息消費(fèi)者正在監(jiān)聽(tīng)隊(duì)列上的消息,,JMS消息服務(wù)器將根據(jù)“先來(lái)者優(yōu)先”的原則確定由哪個(gè)消息消費(fèi)者接收下一條消息。如果沒(méi)有消息消費(fèi)者在監(jiān)聽(tīng)隊(duì)列,消息將保留在隊(duì)列中,直至消息消費(fèi)者連接到隊(duì)列為止。這種消息傳遞模型是傳統(tǒng)意義上的懶模型或輪詢模型。在此模型中,消息不是自動(dòng)推動(dòng)給消息消費(fèi)者的,而是要由消息消費(fèi)者從隊(duì)列中請(qǐng)求獲得。?
? ? ? ? 2、發(fā)布/訂閱(publish/subscribe,簡(jiǎn)稱pub/sub)Topic消息傳遞模型:
? ? ? ? 通過(guò)該消息傳遞模型,應(yīng)用程序能夠?qū)⒁粭l消息發(fā)送給多個(gè)消息消費(fèi)者。在此傳送模型中,消息目的地類型是主題(即Destination接口實(shí)現(xiàn)類實(shí)例由Session接口實(shí)現(xiàn)類實(shí)例通過(guò)調(diào)用其createTopic方法并傳入主題名稱而創(chuàng)建)。消息首先由消息生產(chǎn)者發(fā)布至消息服務(wù)器中特定的主題中,然后由消息服務(wù)器將消息傳送至所有已訂閱此主題的消費(fèi)者。主題目標(biāo)也支持長(zhǎng)期訂閱。長(zhǎng)期訂閱表示消費(fèi)者已注冊(cè)了主題目標(biāo),但在消息到達(dá)目標(biāo)時(shí)該消費(fèi)者可以處于非活動(dòng)狀態(tài)。當(dāng)消費(fèi)者再次處于活動(dòng)狀態(tài)時(shí),將會(huì)接收該消息。如果消費(fèi)者均沒(méi)有注冊(cè)某個(gè)主題目標(biāo),該主題只保留注冊(cè)了長(zhǎng)期訂閱的非活動(dòng)消費(fèi)者的消息。與PTP消息傳遞模型不同,pub/sub消息傳遞模型允許多個(gè)主題訂閱者接收同一條消息。JMS一直保留消息,直至所有主題訂閱者都接收到消息為止。pub/sub消息傳遞模型基本上是一個(gè)推模型。在該模型中,消息會(huì)自動(dòng)廣播,消息消費(fèi)者無(wú)須通過(guò)主動(dòng)請(qǐng)求或輪詢主題的方法來(lái)獲得新的消息。?
? ? ? ? 具體區(qū)別對(duì)比如下:
| 類型 | Topic | Queue |
| 概要 | Publish Subscribe messaging 發(fā)布訂閱消息 | Point-to-Point 點(diǎn)對(duì)點(diǎn) |
| 有無(wú)狀態(tài) | topic數(shù)據(jù)默認(rèn)不落地,是無(wú)狀態(tài)的。 | Queue數(shù)據(jù)默認(rèn)會(huì)在mq服務(wù)器上以文件形式保存,比如Active MQ一般保存在$AMQ_HOME\data\kr-store\data下面。也可以配置成DB存儲(chǔ)。 |
| 完整性保障 | 并不保證publisher發(fā)布的每條數(shù)據(jù),Subscriber都能接受到。 | Queue保證每條數(shù)據(jù)都能被receiver接收。 |
| 消息是否會(huì)丟失 | 一般來(lái)說(shuō)publisher發(fā)布消息到某一個(gè)topic時(shí),只有正在監(jiān)聽(tīng)該topic地址的sub能夠接收到消息;如果沒(méi)有sub在監(jiān)聽(tīng),該topic就丟失了。 | Sender發(fā)送消息到目標(biāo)Queue,receiver可以異步接收這個(gè)Queue上的消息。Queue上的消息如果暫時(shí)沒(méi)有receiver來(lái)取,也不會(huì)丟失。 |
| 消息發(fā)布接收策略 | 一對(duì)多的消息發(fā)布接收策略,監(jiān)聽(tīng)同一個(gè)topic地址的多個(gè)sub都能收到publisher發(fā)送的消息。Sub接收完通知mq服務(wù)器 | 一對(duì)一的消息發(fā)布接收策略,一個(gè)sender發(fā)送的消息,只能有一個(gè)receiver接收。receiver接收完后,通知mq服務(wù)器已接收,mq服務(wù)器對(duì)queue里的消息采取刪除或其他操作。 |
? ? ? ?
? ? 關(guān)于ActiveMQ的安裝及使用詳見(jiàn)我的另一篇文章:ActiveMQ安裝配置及使用
總結(jié)
以上是生活随笔為你收集整理的ActiveMQ—Queue与Topic区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 摩托车年审多少钱啊?
- 下一篇: 北语计算机应用基础2,北语17春《计算机