Jms Topic和Queue的比較

2021-05-05 01:48:10 字數 1205 閱讀 7490

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裡的訊息採取刪除或其他操作。

以下是符合jms1.1規範的使用queue傳輸訊息的**,使用amq作為jms的實現,想要更clean的**,可以考慮將amq的實現di:

jms在建立session時可以有兩個引數,第乙個引數是是否使用事務,第二個引數是消費者向傳送者確認訊息已經接收的方式:

session session = connection.createsession(false, session.client_acknowledge);

確認訊息的方式有如下三種:

auto_acknowledge(自動通知)

client_acknowledge(客戶端自行決定通知時機)

dups_ok_acknowledge(延時//批量通知)

如果使用的是 客戶端自行決定通知時機 方式,那麼需要在messagelistener裡顯式呼叫message.acknowledge()來通知伺服器。伺服器接收到通知後採取相應的操作。

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...

stack和queue的使用

stack的介紹及使用 1.stack是一種容器介面卡,專門用在具有先進後出操作的上下文環境中,其刪除只能從容器的一端進行元素的插入與提取操作 2.stack是作為容器介面卡被實現的,容器介面卡即是對特定類封裝作為其底層的容器,並提供一組特定的成員函式來訪問其元素,將特定類作為其底層的,元素特定容器...

STL stack和queue的用法

include include include using namespace std stack s stack int,vector stk 覆蓋基礎容器型別,使用vector實現stk s.empty 判斷stack是否為空,為空返回true,否則返回false s.size 返回stack中...