queue與topic的區別

2021-08-17 07:42:14 字數 1188 閱讀 7631

jms中定義了兩種訊息模型:

點對點(point to point, queue)

和發布/訂閱(publish/subscribe,topic)

。主要區別就是

是否能重複消費

訊息生產者生產訊息傳送到queue中,然後訊息消費者從queue中取出並且消費訊息。

訊息被消費以後,queue中不再有儲存,所以訊息消費者不可能消費到已經被消費的訊息。

queue支援存在多個消費者,但是對乙個訊息而言,只會有乙個消費者可以消費、其它的則不能消費此訊息了。

當消費者不存在時,訊息會一直儲存,直到有消費消費

訊息生產者(發布)將訊息發布到topic中,同時有多個訊息消費者(訂閱)消費該訊息。

和點對點方式不同,發布到topic的訊息會被所有訂閱者消費

。當生產者發布訊息,不管是否有消費者。都不會儲存訊息

jms規範裡的兩種message傳輸方式topic和queue,兩者的對比如下

topic

queue

概要publish  subscribe messaging 發布訂閱訊息

point-to-point  點對點

有無狀態

topic資料預設不落地,是無狀態的。

queue資料缺省會在mq伺服器上以檔案形式儲存,比如active mq一般儲存在$amq_home\data\kr-store\data下面。也可以配置成db儲存。

完整性保障

並不保證publisher發布的每條資料,subscriber都能接受到。

queue保證每條資料都能被receiver接收。

訊息是否會丟失

一般來說publisher發布訊息到某乙個topic時,只有正在監聽該topic位址的sub能夠接收到訊息;如果沒有sub在監聽,該topic就丟失了。

sender傳送訊息到目標queue,receiver可以非同步接收這個queue上的訊息。queue上的訊息如果暫時沒有receiver來取,也不會丟失。

訊息發布接收策略

一對多的訊息發布接收策略,監聽同乙個topic位址的多個sub都能收到publisher傳送的訊息。sub接收完通知mq伺服器

一對一的訊息發布接收策略,乙個sender傳送的訊息,只能有乙個receiver接收。receiver接收完後,通知mq伺服器已接收,mq伺服器對queue裡的訊息採取刪除或其他操作。

Queue操作區別

這裡簡單對其重複的方法做點簡單的區分。add增加乙個元索 如果佇列已滿,則丟擲乙個iiiegaislabeepeplian異常 remove移除並返回佇列頭部的元素 如果隊列為空,則丟擲乙個nosuchelementexception異常 element返回佇列頭部的元素 如果隊列為空,則丟擲乙個n...

Queue 和Stack 的區別

protected void page load object sender,eventargs e queue 先進先出。所以結果是123 true string str1 queue.dequeue tostring foreach object obj in queue string str2...

Queue和List的區別

queue 與list,linkedlist與 arraylist 用法與區別 list 是乙個介面,不能例項化,通過例項化arraylist 或者linkedlist來呼叫 list list new arraylist list 元素是有序的 怎麼存的就怎麼取出來,順序不會亂 元素可以重複 角標...