JMS(Java Message Service) 即Java消息服務。它提供標準的產生、發送、接收消息的接口簡化企業 應用的開發。它是J2EE規範的一部分,定義的接口標準,針對不一樣的廠商有不一樣的實現庫。java
JMS的原型是以MOM爲基準, 進行組件的。 程序A 是消息生產者, 將消息發送到 MOM 服務器。程序B是消息消費者,負責從MOM服務器(隊列服務器)那裏接收消息。
程序員
其中JMS 有兩種消息通訊模型:點到點(point-to-point)(P2P)模型和發佈/訂閱(Pub/Sub)模型.apache
P2P 模型規定了一個消息只能有一個接收者;服務器
對於點到點模型,消息生產者產生一個消息後,把這個消息發送到一個Queue(隊列)中,而後消息接收者再從這個Queue中讀取,一旦這個消息被一個接收者讀取以後,它就在這個Queue中消失了,因此一個消息只能被一個接收者消費。測試
Pub/Sub 模型容許一個消息能夠有多個接收者。
與點到點模型不一樣,發佈/訂閱模型中,消息生產者產生一個消息後,把這個消息發送到一個Topic中,這個Topic能夠同時有多個接收者在監聽,當一個消息到達這個Topic以後,全部消息接收者都會收到這個消息。spa
簡單的講,點到點模型和發佈/訂閱模型的區別就是前者是一對一,後者是一對多。線程
JMS 應用程序由一下幾部分組成:對象
JMS客戶端:發送和接收消息的java程序語言接口
JMS提供商:基於JMS規範的實現庫,如JBOSS的 HornetQ ,apache的activeMQ等
隊列
JMS消息:實體對象,它是一個序列化對象,將傳遞的消息內容實例化成一個對象,在客戶端和服務器之間傳遞。
JMS託管對象:託管對象是一些預配置類,如 ConnectionFactory,這些類一般是一些重類,只需被實例化一次或者使用池化技術來管理。在實際應用中,一般都是交給容器管理,客戶端經過JNDI來取得相應的對象。 再測試階段,基於環境限制,能夠自行實例化對象(產品環境中 不介意這麼作)
JMS 基於一系列通用的消息概念。每一個JMS 消息域—PTP 和Pub/Sub—也爲這些概念定義了各自的接口集。JMS 通用接口提供了一個獨立於PTP 和Pub/Sub 消息域的域視圖。鼓勵JMS 客戶端程序員使用這些接口來建立他們的客戶端程序。
ConnectionFactory——客戶端使用這個被管理對象來建立一個Connection。
Connection——一個到JMS 提升商的活動鏈接。
Destination——封裝了消息目的地標識的被管理對象。
Session——一個用於發送和接收消息的單線程上下文。
MessageProducer——一個由Session 建立用於往目的地發送消息的對象。
MessageConsumer——一個由Session 建立用於接收發送到目的地的消息的對象。