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存儲。spa |
完整性保障 | 並不保證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裏的消息採起刪除或其餘操做。 |