[原創] 深入掌握JMS(一):JSM基礎
1. JMS基本概念
JMS(Java Message Service) 即Java訊息服務。它提供標準的產生、傳送、接收訊息的介面簡化企業應用的開發。它支援兩種訊息通訊模型:點到點(point-to-point)(P2P)模型和釋出/訂閱(Pub/Sub)模型。P2P 模型規定了一個訊息只能有一個接收者;Pub/Sub 模型允許一個訊息可以有多個接收者。
對於點到點模型,訊息生產者產生一個訊息後,把這個訊息傳送到一個Queue(佇列)中,然後訊息接收者再從這個Queue中讀取,一旦這個訊息被一個接收者讀取之後,它就在這個Queue中消失了,所以一個訊息只能被一個接收者消費。
與點到點模型不同,釋出/訂閱模型中,訊息生產者產生一個訊息後,把這個訊息傳送到一個Topic中,這個Topic可以同時有多個接收者在監聽,當一個訊息到達這個Topic之後,所有訊息接收者都會收到這個訊息。
2. 幾個重要概念
Destination:訊息傳送的目的地,也就是前面說的Queue和Topic。建立好一個訊息之後,只需要把這個訊息傳送到目的地,訊息的傳送者就可以繼續做自己的事情,而不用等待訊息被處理完成。至於這個訊息什麼時候,會被哪個消費者消費,完全取決於訊息的接受者。
Message:從字面上就可以看出是被髮送的訊息。它有下面幾種型別:
StreamMessage:Java 資料流訊息,用標準流操作來順序的填充和讀取。
MapMessage:一個Map型別的訊息;名稱為 string 型別,而值為 Java 的基本型別。
TextMessage:普通字串訊息,包含一個String。
ObjectMessage:物件訊息,包含一個可序列化的Java 物件
BytesMessage:二進位制陣列訊息,包含一個byte[]。
XMLMessage: 一個XML型別的訊息。
最常用的是TextMessage和ObjectMessage。
Session:與JMS提供者所建立的會話,通過Session我們才可以建立一個Message。
Connection:與JMS提供者建立的一個連線。可以從這個連線建立一個會話,即Session。
ConnectionFactory: 那如何建立一個Connection呢?這就需要下面講到的ConnectionFactory了。通過這個工廠類就可以得到一個與JMS提供者的連線,即Conection。
Producer:訊息的生產者,要傳送一個訊息,必須通過這個生產者來傳送。
MessageConsumer:與生產者相對應,這是訊息的消費者或接收者,通過它來接收一個訊息。
前面多次提到JMS提供者,因為JMS給我們提供的只是一系列介面,當我們使用一個JMS的時候,還是需要一個第三方的提供者,它的作用就是真正管理這些Connection,Session,Topic和Queue等。
通過下面這個簡圖可以看出上面這些概念的關係。
ConnectionFactory---->Connection--->Session--->Message
Destination + Session------------------------------------>Producer
Destination + Session------------------------------------>MessageConsumer
那麼可能有人會問: ConnectionFactory和Destination 從哪兒得到?
這就和JMS提供者有關了. 如果在一個JavaEE環境中, 可以通過JNDI查詢得到, 如果在一個非JavaEE環境中, 那隻能通過JMS提供者提供給我們的介面得到了.
JMS(Java Message Service) 即Java訊息服務。它提供標準的產生、傳送、接收訊息的介面簡化企業應用的開發。它支援兩種訊息通訊模型:點到點(point-to-point)(P2P)模型和釋出/訂閱(Pub/Sub)模型。P2P 模型規定了一個訊息只能有一個接收者;Pub/Sub 模型允許一個訊息可以有多個接收者。
對於點到點模型,訊息生產者產生一個訊息後,把這個訊息傳送到一個Queue(佇列)中,然後訊息接收者再從這個Queue中讀取,一旦這個訊息被一個接收者讀取之後,它就在這個Queue中消失了,所以一個訊息只能被一個接收者消費。
與點到點模型不同,釋出/訂閱模型中,訊息生產者產生一個訊息後,把這個訊息傳送到一個Topic中,這個Topic可以同時有多個接收者在監聽,當一個訊息到達這個Topic之後,所有訊息接收者都會收到這個訊息。
簡單的講,點到點模型和釋出/訂閱模型的區別就是前者是一對一,後者是一對多。 |
Destination:訊息傳送的目的地,也就是前面說的Queue和Topic。建立好一個訊息之後,只需要把這個訊息傳送到目的地,訊息的傳送者就可以繼續做自己的事情,而不用等待訊息被處理完成。至於這個訊息什麼時候,會被哪個消費者消費,完全取決於訊息的接受者。
Message:從字面上就可以看出是被髮送的訊息。它有下面幾種型別:
StreamMessage:Java 資料流訊息,用標準流操作來順序的填充和讀取。
MapMessage:一個Map型別的訊息;名稱為 string 型別,而值為 Java 的基本型別。
TextMessage:普通字串訊息,包含一個String。
ObjectMessage:物件訊息,包含一個可序列化的Java 物件
BytesMessage:二進位制陣列訊息,包含一個byte[]。
XMLMessage: 一個XML型別的訊息。
最常用的是TextMessage和ObjectMessage。
Session:與JMS提供者所建立的會話,通過Session我們才可以建立一個Message。
Connection:與JMS提供者建立的一個連線。可以從這個連線建立一個會話,即Session。
ConnectionFactory: 那如何建立一個Connection呢?這就需要下面講到的ConnectionFactory了。通過這個工廠類就可以得到一個與JMS提供者的連線,即Conection。
Producer:訊息的生產者,要傳送一個訊息,必須通過這個生產者來傳送。
MessageConsumer:與生產者相對應,這是訊息的消費者或接收者,通過它來接收一個訊息。
前面多次提到JMS提供者,因為JMS給我們提供的只是一系列介面,當我們使用一個JMS的時候,還是需要一個第三方的提供者,它的作用就是真正管理這些Connection,Session,Topic和Queue等。
通過下面這個簡圖可以看出上面這些概念的關係。
ConnectionFactory---->Connection--->Session--->Message
Destination + Session------------------------------------>Producer
Destination + Session------------------------------------>MessageConsumer
那麼可能有人會問: ConnectionFactory和Destination 從哪兒得到?
這就和JMS提供者有關了. 如果在一個JavaEE環境中, 可以通過JNDI查詢得到, 如果在一個非JavaEE環境中, 那隻能通過JMS提供者提供給我們的介面得到了.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10742815/viewspace-578446/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [原創]深入掌握JMS(四):實戰Queue
- [原創]深入掌握JMS(五):實戰Topic
- [原創]深入掌握JMS(七):DeliveryMode例子
- [原創]深入掌握JMS(十一):TemporaryQueue和TemporaryTopic
- 深入淺出JMS(一)——JMS簡單介紹
- 深入C++02:深入學習C++還必須掌握的基礎C++
- Nginx深入瞭解-基礎(一)Nginx
- 【基礎篇】一文帶你掌握 RedisRedis
- 深入淺出RxJava(一:基礎篇)RxJava
- JMS學習(一):初識JMS
- 原創:oracle PL/SQL程式設計基礎 上OracleSQL程式設計
- 原創:oracle PL/SQL程式設計基礎 下OracleSQL程式設計
- ios基礎之UITableViewCell的重用(帶示例原創)iOSUIView
- HTML需掌握的基礎HTML
- Hacker需要掌握的基礎
- java 基礎深入Java
- 深入瞭解Oracle ASM(一):基礎概念OracleASM
- java基礎(一) 深入解析基本型別Java型別
- 【Java基礎】--深入剖析基礎語法Java
- Python 基礎知識自檢,離深入掌握 Python 還有多遠Python
- Oracle中Hint深入理解(原創)Oracle
- 深入學習Netty(一)NIO基礎篇Netty
- 零基礎如何快速掌握Python基礎語法?Python
- 深入掌握service
- 關於mybatis,需要掌握的基礎MyBatis
- 【原創】ORACLE 深入解析10053事件Oracle事件
- 深入理解Java記憶體模型(一)——基礎Java記憶體模型
- 從搭建vue-腳手架到掌握webpack配置(一.基礎配置)VueWeb
- 快速掌握Python基礎語法(下)Python
- 快速掌握JavaScript面試基礎知識(二)JavaScript面試
- 快速掌握JavaScript面試基礎知識(三)JavaScript面試
- 深入CSS基礎之box modelCSS
- Nginx深入瞭解-基礎(三)Nginx
- Java基礎——深入理解反射Java反射
- JS基礎-完美掌握繼承知識點JS繼承
- 大資料需要掌握的數學基礎大資料
- Hollis原創|深入分析Java的編譯原理Java編譯原理
- (原創)建立windows域—深入理解域概念薦Windows