JMS具有兩種通信模式:
1、Point-to-Point Messaging Domain (點(diǎn)對(duì)點(diǎn))
2、Publish/Subscribe Messaging Domain (發(fā)布/訂閱模式)
在JMS API出現(xiàn)之前,大部分產(chǎn)品使用“點(diǎn)對(duì)點(diǎn)”和“發(fā)布/訂閱”中的任一方式來(lái)進(jìn)行消息通訊。JMS定義了這兩種消息發(fā)送模型的規(guī)范,它們相互獨(dú)立。任何JMS的提供者可以實(shí)現(xiàn)其中的一種或兩種模型,這是它們自己的選擇。JMS規(guī)范提供了通用接口保證我們基于JMS API編寫的程序適用于任何一種模型。
1.P2P模式

P2P模式包含三個(gè)角色:消息隊(duì)列(Queue),發(fā)送者(Sender),接收者(Receiver)。每個(gè)消息都被發(fā)送到一個(gè)特定的隊(duì)列,接收者從隊(duì)列中獲取消息。隊(duì)列保留著消息,直到他們被消費(fèi)或超時(shí)。
P2P的特點(diǎn)
每個(gè)消息只有一個(gè)消費(fèi)者(Consumer)(即一旦被消費(fèi),消息就不再在消息隊(duì)列中)
發(fā)送者和接收者之間在時(shí)間上沒(méi)有依賴性,也就是說(shuō)當(dāng)發(fā)送者發(fā)送了消息之后,不管接收者有沒(méi)有正在運(yùn)行,它不會(huì)影響到消息被發(fā)送到隊(duì)列
接收者在成功接收消息之后需向隊(duì)列應(yīng)答成功
如果希望發(fā)送的每個(gè)消息都會(huì)被成功處理的話,那么需要P2P模式。
2.Pub/Sub模式

包含三個(gè)角色主題(Topic),發(fā)布者(Publisher),訂閱者(Subscriber) 多個(gè)發(fā)布者將消息發(fā)送到Topic,系統(tǒng)將這些消息傳遞給多個(gè)訂閱者。
Pub/Sub的特點(diǎn)
每個(gè)消息可以有多個(gè)消費(fèi)者
發(fā)布者和訂閱者之間有時(shí)間上的依賴性。針對(duì)某個(gè)主題(Topic)的訂閱者,它必須創(chuàng)建一個(gè)訂閱者之后,才能消費(fèi)發(fā)布者的消息
為了消費(fèi)消息,訂閱者必須保持運(yùn)行的狀態(tài)
為了緩和這樣嚴(yán)格的時(shí)間相關(guān)性,JMS允許訂閱者創(chuàng)建一個(gè)可持久化的訂閱。這樣,即使訂閱者沒(méi)有被激活(運(yùn)行),它也能接收到發(fā)布者的消息。
如果希望發(fā)送的消息可以不被做任何處理、或者只被一個(gè)消息者處理、或者可以被多個(gè)消費(fèi)者處理的話,那么可以采用Pub/Sub模型。