JMS基礎篇

JMS簡介:html

            JMS即Java消息服務(Java Message Service)應用程序接口是一個Java平臺中關於面向消息中間件(MOM)的API,用於在兩個應用程序之間,或分佈式系統中發送消息,進行異步通訊。Java消息服務是一個與具體平臺無關的API,絕大多數MOM提供商都對JMS提供支持。java

定義:JMS(java Messaging Service)是Java平臺上有關面向消息中間件(MOM)的技術規範,它便於消息系統中的Java應用程序進行消息交換,而且經過提供標準的產生、發送、接收消息的接口簡化企業應用的開發,翻譯爲Java消息服務。JMS是一種與廠商無關的 API,用來訪問消息收發系統消息。它相似於JDBC(Java DatabaseConnectivity):這裏,JDBC 是能夠用來訪問許多不一樣關係數據庫的 API,而 JMS 則提供一樣與廠商無關的訪問方法,以訪問消息收發服務.數據庫

概念:網絡

使用JMS 的應用程序被稱爲JMS 客戶端,處理消息路由與傳遞的消息系統被稱爲JMS Provider,而JMS 應用則是由多個JMS 客戶端和一個JMS Provider 構成的業務系統。發送消息的JMS 客戶端被稱爲生產者(producer),而接收消息的JMS 客戶端則被稱爲消費者(consumer)。同一JMS 客戶端既能夠是生產者也能夠是消費者。session

  1. 基本概念數據結構

    JMS是java的消息服務,JMS的客戶端之間能夠經過JMS服務進行異步的消息傳輸。負載均衡

  2. 消息模型異步

    ○ Point-to-Point(P2P)
    ○ Publish/Subscribe(Pub/Sub)

    即點對點和發佈訂閱模型socket

  3. P2P分佈式

    1. P2P模式圖 

      PTP(point-to-point)即點對點消息傳輸模型。PTP以下圖所示:

    2. 咱們能夠看到,一個或多個生產者發送消息,消息m2先抵達了queue,而後m1也發出了,並一同存在於一個先進先出的queue裏面。消費者也存在一個或多個,對queue裏的消息進行消費。但消息被隨機的一個消費者消費且僅消費一次。

    3. 涉及到的概念 
      1. 消息隊列(Queue)
      2. 發送者(Sender)
      3. 接收者(Receiver)
      4. 每一個消息都被髮送到一個特定的隊列,接收者從隊列中獲取消息。隊列保留着消息,直到他們被消費或超時。
    4. P2P的特色

      1. 每一個消息只有一個消費者(Consumer)(即一旦被消費,消息就再也不在消息隊列中)
      2. 發送者和接收者之間在時間上沒有依賴性,也就是說當發送者發送了消息以後,無論接收者有沒有正在運行,它不會影響到消息被髮送到隊列
      3. 接收者在成功接收消息以後需向隊列應答成功

      若是你但願發送的每一個消息都應該被成功處理的話,那麼你須要P2P模式。

  4. Pub/Sub

    1. Pub/Sub模式圖 
      這裏寫圖片描述
    2. 涉及到的概念 
      1. 主題(Topic)
      2. 發佈者(Publisher)
      3. 訂閱者(Subscriber) 
        客戶端將消息發送到主題。多個發佈者將消息發送到Topic,系統將這些消息傳遞給多個訂閱者。
    3. Pub/Sub的特色

      1. 每一個消息能夠有多個消費者
      2. 發佈者和訂閱者之間有時間上的依賴性。針對某個主題(Topic)的訂閱者,它必須建立一個訂閱者以後,才能消費發佈者的消息,並且爲了消費消息,訂閱者必須保持運行的狀態。
      3. 爲了緩和這樣嚴格的時間相關性,JMS容許訂閱者建立一個可持久化的訂閱。這樣,即便訂閱者沒有被激活(運行),它也能接收到發佈者的消息。

      若是你但願發送的消息能夠不被作任何處理、或者被一個消息者處理、或者能夠被多個消費者處理的話,那麼能夠採用Pub/Sub模型

    4. Queue與Topic的比較

      1. JMS Queue執行load balancer語義

          一條消息僅能被一個consumer收到。若是在message發送的時候沒有可用的consumer,那麼它講被保存一直到能處理該message的consumer可用。若是一個consumer收到一條message後卻不響應它,那麼這條消息將被轉到另一個consumer那兒。一個Queue能夠有不少consumer,而且在多個可用的consumer中負載均衡。

      2. Topic實現publish和subscribe語義

          一條消息被publish時,他將發送給全部感興趣的訂閱者,因此零到多個subscriber將接收到消息的一個拷貝。可是在消息代理接收到消息時,只有激活訂閱的subscriber可以得到消息的一個拷貝。

      3. 分別對應兩種消息模式

          Point-to-Point(點對點),Publisher/Subscriber Model(發佈/訂閱者)

          其中在Publicher/Subscriber模式下又有Nondurable subscription(非持久化訂閱)和durable subscription(持久化訂閱)兩種消息處理方式。

  5. 消息的消費 
    在JMS中,消息的產生和消費是異步的。對於消費者來講,JMS的消費者能夠經過兩種方式來消費消息。 
    ○ 同步 
    訂閱者或接收者調用receive方法來接收消息,receive方法在可以接收到消息以前(或超時以前)將一直阻塞 
    ○ 異步 
    訂閱者或接收者能夠註冊爲一個消息監聽器。當消息到達以後,系統自動調用監聽器的onMessage方法。

MQ(JMS Provider)         

   MQ全稱爲Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通訊方法。應用程序經過寫和檢索出入列隊的針對應用程序的數據(消息)來通訊,而無需專用鏈接來連接它們.

JMS和MQ的關係:

JMS是一個用於提供消息服務的技術規範,它制定了在整個消息服務提供過程當中的全部數據結構和交互流程。而MQ則是消息隊列服務,是面向消息中間件(MOM)的最終實現,是真正的服務提供者;MQ的實現能夠基於JMS,也能夠基於其餘規範或標準。

支持JMS的開源MQ:

目前選擇的最多的是ActiveMQ

ActiveMQ 是Apache出品,最流行的,能力強勁的開源消息總線。ActiveMQ 是一個徹底支持JMS1.1和J2EE 1.4規範的 JMS Provider實現.

JMS接口API

流程以下:
發送端的標準流程是:建立鏈接工廠>建立鏈接>建立session>建立發送者>建立消息體>發送消息到Destination(queue或topic)。

  接收端則爲:建立鏈接工廠>建立鏈接>建立session>建立接收者>建立消息監聽器監聽某Destination的消息>獲取消息並執行業務邏輯

接口簡介:
 

頂級接口

P2P

Pub/sub

備註

ConnectionFactory

QueueConnectionFactory

TopicConnectionFactory

基於工廠模式,建立和JMS提供者之間的連接,須要制定連接的URL或者協議;任何JMS客戶端和JMS提供者之間的交互,都必須基於制定的鏈接.

Destination

Queue

Topic

「目的地」,用於描述消息的通道類型,是JMS提供者用於標記消息歸屬類型的」標記」.
 

Destination的意思是消息生產者的消息發送目標或者說消息消費者的消息來源。對於消息生產者來講,它的Destination是某個隊列(Queue)或某個主題(Topic);對於消息消費者來講,它的Destination也是某個隊列或主題(即消息來源)。

因此,Destination實際上就是兩種類型的對象:Queue、Topic

Connection

QueueConnection

TopicConnection

Connection表示在客戶端和JMS系統之間創建的連接(對TCP/IP socket的包裝)。Connection能夠產生一個或多個Session。跟ConnectionFactory同樣,Connection也有兩種類型:QueueConnection和TopicConnection。

Session

QueueSession

TopicSession

「會話」,在邏輯上用於區分JMS客戶端,由於」連接」可被公用以提升網絡利用率;每一個session能夠支持相互獨立的」事務」和相關屬性.每一個session都有ID.


Session是咱們操做消息的接口。能夠經過session建立生產者、消費者、消息等。Session提供了事務的功能。當咱們須要使用session發送/接收多個消息時,能夠將這些發送/接收動做放到一個事務中。一樣,也分QueueSession和TopicSession。

Message

--

--

「消息」,JMS API中提供了多種類型Message,它們有各自的」序列化/反序列化」機制;消息中能夠包含多種JMS屬性以及客戶端自定義的消息屬性和內容.

MessageProducer

QueueSender

TopicPublisher

「生產者」,一種能夠向JMS提供者提交消息的客戶端類型.

MessageConsumer

QueueReceiver

TopicSubscriber

「消費者」,一種能夠向JMS提供獲取消息的客戶端類型.

 

 

至此,JMS的基本概念以及經常使用的接口Api大體瞭解.更深層次的理解須要在實際的業務代碼中去理解.

參考:

http://www.cnblogs.com/whsa/p/4223728.html

http://blog.csdn.net/jiuqiyuliang/article/details/46701559

相關文章
相關標籤/搜索