JMS基本概念
介紹
Java Message Service(JMS)是SUN提出的旨在統一各種MOM(Message-Oriented Middleware )系統介面的規範,包含點對點(Point to Point,PTP)和釋出/訂閱(Publish/Subscribe,pub/sub)兩種訊息模型,提供可靠的訊息傳輸、事務和訊息過濾機制。
簡單的說,JMS制定了一個發訊息的規範。是一個與具體平臺無關的API,絕大多數MOM提供商都對JMS提供支援。
ActiveMQ是Apache出品的開源專案,它是JMS規範的一個實現。
JMS模型
1. 點對點模型(基於佇列)
每個訊息只能有一個消費者。訊息的生產者和消費者之間沒有時間上的相關性,可以有多個傳送者,但是隻能被一個消費者消費
設計到的概念:
1. 訊息佇列(Queue)
2. 傳送者(Sender)
3. 接受者(Receiver)
4. 每個訊息被髮送到一個指定的佇列,接受者從佇列中消費訊息。佇列中保留訊息直到被消費或者超時
特點:
1. 每個訊息只能有一個消費者,一旦訊息被消費成功,就會從佇列中移除
2. 傳送者和接受者沒有時間上的依賴性,訊息是否被髮送成功,不會受到接受者的影響
3. 接受者沒有訊息可以消費處於阻塞狀態,接受者接受到訊息會向佇列應答成功。
適合場景:
佇列中的每個訊息都必須被消費。
2. 釋出訂閱模型
概念:
1. 主題(Topic)
2. 釋出者(Publisher)
3. 訂閱者(Receiver)
4. 多個釋出者將訊息傳送到主題,多個訂閱者從主題取出訊息
特點:
1. 一個訊息可以有多個消費者
2. 釋出者和訂閱者存在時間上的依賴性,訂閱主題的消費者,只能消費在它訂閱之後的訊息
3. 為了緩和嚴格的時間相關性。jms允許建立一個持久的訂閱,這樣即使訂閱者沒有啟用,也能收到訊息
適合:
訊息被一個或者多個訂閱者消費,或者不消費
消費的同步和非同步
在jms中訊息的產生和訊息的消費是非同步的。消費訊息有同步和非同步兩種模式
同步:
訂閱者或接收者呼叫receive方法來接收訊息,receive方法在能夠接收到訊息之前(或超時之前)將一直阻塞
非同步:
訂閱者或接收者可以註冊為一個訊息監聽器。當訊息到達之後,系統自動呼叫監聽器的onMessage方法。
JMS程式設計模型
(1) ConnectionFactory
建立Connection物件的工廠,針對兩種不同的jms訊息模型,分別有QueueConnectionFactory和TopicConnectionFactory兩種。可以通過JNDI來查詢ConnectionFactory物件。
(2) Destination
Destination的意思是訊息生產者的訊息傳送目標或者說訊息消費者的訊息來源。對於訊息生產者來說,它的Destination是某個佇列(Queue)或某個主題(Topic);對於訊息消費者來說,它的Destination也是某個佇列或主題(即訊息來源)。
所以,Destination實際上就是兩種型別的物件:Queue、Topic可以通過JNDI來查詢Destination。
(3) Connection
Connection表示在客戶端和JMS系統之間建立的連結(對TCP/IP socket的包裝)。Connection可以產生一個或多個Session。跟ConnectionFactory一樣,Connection也有兩種型別:QueueConnection和TopicConnection。
(4) Session
Session是我們操作訊息的介面。可以通過session建立生產者、消費者、訊息等。Session提供了事務的功能。當我們需要使用session傳送/接收多個訊息時,可以將這些傳送/接收動作放到一個事務中。同樣,也分QueueSession和TopicSession。
(5) 訊息的生產者
訊息生產者由Session建立,並用於將訊息傳送到Destination。同樣,訊息生產者分兩種型別:QueueSender和TopicPublisher。可以呼叫訊息生產者的方法(send或publish方法)傳送訊息。
(6) 訊息消費者
訊息消費者由Session建立,用於接收被髮送到Destination的訊息。兩種型別:QueueReceiver和TopicSubscriber。可分別通過session的createReceiver(Queue)或createSubscriber(Topic)來建立。當然,也可以session的creatDurableSubscriber方法來建立持久化的訂閱者。
(7) MessageListener
訊息監聽器。如果註冊了訊息監聽器,一旦訊息到達,將自動呼叫監聽器的onMessage方法。EJB中的MDB(Message-Driven Bean)就是一種MessageListener。
企業訊息系統的好處
我們先來看看下圖,應用程式A將Message傳送到伺服器上,然後應用程式B從伺服器中接收A發來的訊息,通過這個圖我們一起來分析一下JMS的好處:
提供訊息靈活性,鬆散耦合,非同步性
轉載:https://blog.csdn.net/jiuqiyuliang/article/details/46701559
相關文章
- Java JMS 極簡演示Java
- JMS監聽Oracle AQOracle
- webservice和jms的區別Web
- jmeter之——jms壓測(activemq)JMeterMQ
- JMS訊息服務介紹
- JMS和AMQP有什麼區別嗎MQ
- 訊息佇列之JMS和AMQP對比佇列MQ
- ActiveMq 之JMS 看這一篇就夠了MQ
- 基本概念
- babel基本概念Babel
- mongodb 基本概念MongoDB
- OpenGL基本概念
- Spring 基本概念Spring
- Kafka基本概念Kafka
- PMP基本概念
- 2.1 基本概念
- RocketMQ基本概念MQ
- Mysql基本概念MySql
- mobx基本概念
- javascript:基本概念JavaScript
- 如何提高在Spring Boot中使用MQ JMS的效率 -Mark TaylorSpring BootMQ
- 分散式事務之Spring事務與JMS事務(二)分散式Spring
- 樹的基本概念
- lipaper-基本概念
- 微服務基本概念微服務
- RabbitMQ(1)---基本概念MQ
- 圖的基本概念
- GacUI基本概念(一)UI
- 01-基本概念
- redux的基本概念Redux
- Docker的基本概念Docker
- influxdb的基本概念UX
- 透過Docker啟動Solace,並在Spring Boot透過JMS整合SolaceDockerSpring Boot
- .net core 自帶分散式事務的微服務開源框架JMS分散式微服務框架
- 一個就只是JMS的開源專案,沒有Kafka和RabbitMQ!KafkaMQ
- TCP/IP 基本概念 (二)TCP
- Apache Kafka 的基本概念ApacheKafka
- 演算法基本概念演算法