程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java音訊隊列--JMS概述

Java音訊隊列--JMS概述

編輯:關於JAVA

Java音訊隊列--JMS概述。本站提示廣大學習愛好者:(Java音訊隊列--JMS概述)文章只能為提供參考,不一定能成為您想要的結果。以下是Java音訊隊列--JMS概述正文


1、什麼是JMS

    JMS即Java音訊服務(Java Message Service)使用順序接口,是一個Java平台中關於面向音訊兩頭件(MOM)的API,用於在兩個使用順序之間,或散布式零碎中發送音訊,停止異步通訊。Java音訊服務是一個與詳細平台有關的API,絕大少數MOM提供商都對JMS提供支持(百度百科給出的概述)。我們可以復雜的了解:兩個使用順序之間需求停止通訊,我們運用一個JMS服務,停止兩頭的轉發,經過JMS 的運用,我們可以解除兩個順序之間的耦合。

 

2、JMS的優勢  
  1. Asynchronous(異步)

    JMS is asynchronous by default. So to receive a message, the client is not required to send the request. The message will arrive automatically to the client as they become available.(JMS 本來就是一個異步的音訊服務,客戶端獲取音訊的時分,不需求自動發送懇求,音訊會自動發送給可用的客戶端)

  2. Reliable(牢靠)

    JMS provides the facility of assurance that the message will delivered once and only once. You know that duplicate messages create problems. JMS helps you avoiding such problems.(JMS保證音訊只會遞送一次。大家都遇到過反復創立音訊問題,而JMS能幫你防止該問題。)

 

3、JMS的音訊模型

   JMS具有兩種通訊形式:

      1、Point-to-Point Messaging Domain (點對點)

      2、Publish/Subscribe Messaging Domain (發布/訂閱形式)

   在JMS API呈現之前,大局部產品運用“點對點”和“發布/訂閱”中的任一方式來停止音訊通訊。JMS定義了這兩種音訊發送模型的標准,它們互相獨立。任何JMS的提供者可以完成其中的一種或兩種模型,這是它們自己的選擇。JMS標准提供了通用接口保證我們基於JMS API編寫的順序適用於任何一種模型。

 

  (1)、Point-to-Point Messaging Domain(點對點通訊模型)

      a、形式圖:

      

 

 

      b、觸及到的概念:

        在點對點通訊形式中,使用順序由音訊隊列,發送方,接納方組成。每個音訊都被發送到一個特定的隊列,接納者從隊列中獲取音訊。隊列保存著音訊,直到他們被消費或超時。

 

      c、特點:

      • 每個音訊只需一個消費者
      • 發送者和接納者在時間上是沒有時間的約束,也就是說發送者在發送完音訊之後,不論接納者有沒有承受音訊,都不會影響發送方發送音訊到音訊隊列中。
      • 發送方不論能否在發送音訊,接納方都可以從音訊隊列中去到音訊(The receiver can fetch message whether it is running or not when the sender sends the message)
      • 接納方在接納完音訊之後,需求向音訊隊列應對成功

 

  

  (2)、Publish/Subscribe Messaging Domain(發布/訂閱通訊模型)

      a、形式圖:

        

      

      b、觸及到的概念:

        在發布/訂閱音訊模型中,發布者發布一個音訊,該音訊經過topic傳遞給一切的客戶端。該形式下,發布者與訂閱者都是匿名的,即發布者與訂閱者都不知道對方是誰。並且可以靜態的發布與訂閱Topic。Topic次要用於保管和傳遞音訊,且會不斷保管音訊直到音訊被傳遞給客戶端。

 

 

      c、特點:

      • 一個音訊可以傳遞個多個訂閱者(即:一個音訊可以有多個承受方)
      • 發布者與訂閱者具有時間約束,針對某個主題(Topic)的訂閱者,它必需創立一個訂閱者之後,才干消費發布者的音訊,而且為了消費音訊,訂閱者必需堅持運轉的形態。
      • 為了緊張這樣嚴厲的時間相關性,JMS允許訂閱者創立一個可耐久化的訂閱。這樣,即便訂閱者沒有被激活(運轉),它也能接納到發布者的音訊。

 

 

4、JMS接納音訊

    在JMS中,音訊的發生和音訊是異步的。關於消費來說,JMS的音訊者可以經過兩種方式來消費音訊。

    (1)、同步(Synchronous)

        在同步消費信息形式形式中,訂閱者/接納方經過調用 receive()辦法來接納音訊。在receive()辦法中,線程會阻塞直到音訊抵達或許到指定時間後音訊仍未抵達。

    (2)、異步(Asynchronous)

        運用異步方式接納音訊的話,音訊訂閱者需注冊一個音訊監聽者,相似於事情監聽器,只需音訊抵達,JMS服務提供者會經過調用監聽器的onMessage()遞送音訊。

 

 

5、JMS編程模型 
  1. 管理對象(Administered objects)-銜接工廠(Connection Factories)和目的地(Destination)
  2. 銜接對象(Connections)
  3. 會話(Sessions)
  4. 音訊消費者(Message Producers)
  5. 音訊消費者(Message Consumers)
  6. 音訊監聽者(Message Listeners)

    

 

 

    (1)、Connection Factories

        創立Connection對象的工廠,針對兩種不同的jms音訊模型,辨別有QueueConnectionFactory和TopicConnectionFactory兩種。可以經過JNDI來查找ConnectionFactory對象。客戶端運用一個銜接工廠對象銜接到JMS服務提供者,它創立了JMS服務提供者和客戶端之間的銜接。JMS客戶端(如發送者或承受者)會在JNDI名字空間中搜索並獲取該銜接。運用該銜接,客戶端可以與目的地通訊,往隊列或話題發送/接納音訊。

      

QueueConnectionFactory queueConnFactory = (QueueConnectionFactory) initialCtx.lookup ("primaryQCF");
Queue purchaseQueue = (Queue) initialCtx.lookup ("Purchase_Queue");
Queue returnQueue = (Queue) initialCtx.lookup ("Return_Queue");

    (2)、Destination

         目的地指明音訊被發送的目的地以及客戶端接納音訊的來源。JMS運用兩種目的地,隊列和話題。如下代碼指定了一個隊列和話題:

    創立一個隊列Session:

QueueSession ses = con.createQueueSession (false, Session.AUTO_ACKNOWLEDGE);  //get the Queue object  
Queue t = (Queue) ctx.lookup ("myQueue");  //create QueueReceiver  
QueueReceiver receiver = ses.createReceiver(t); 

    創立一個Topic Session:

QueueSession ses = con.createQueueSession (false, Session.AUTO_ACKNOWLEDGE);  //get the Queue object  
Queue t = (Queue) ctx.lookup ("myQueue");  //create QueueReceiver  
QueueReceiver receiver = ses.createReceiver(t); 

 

 

    (3)、Connection

      Connection表示在客戶端和JMS零碎之間樹立的鏈接(對TCP/IP socket的包裝)。Connection可以發生一個或多個Session。跟ConnectionFactory一樣,Connection也有兩品種型:QueueConnection和TopicConnection。

      銜接對象封裝了與JMS提供者之間的虛擬銜接,假如我們有一個ConnectionFactory對象,可以運用它來創立一個銜接。

      

Connection connection = connectionFactory.createConnection();

 

 

    (4)、Session

      Session 是我們抵消息停止操作的接口,可以經過session創立消費者、消費者、音訊等。Session 提供了事務的功用,假如需求運用session發送/接納多個音訊時,可以將這些發送/接納舉措放到一個事務中。

      我們可以在銜接創立完成之後創立session:

Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

      這外面提供了參數兩個參數,第一個參數是能否支持事務,第二個是事務的類型

 

    (5)、Producter

      音訊消費者由Session創立,用於往目的地發送音訊。消費者完成MessageProducer接口,我們可以為目的地、隊列或話題創立消費者;

      

MessageProducer producer = session.createProducer(dest);
MessageProducer producer = session.createProducer(queue);
MessageProducer producer = session.createProducer(topic);

    

    (6)、Consumer

      音訊消費者由Session創立,用於接納被發送到Destination的音訊。

 

MessageConsumer consumer = session.createConsumer(dest);
MessageConsumer consumer = session.createConsumer(queue);
MessageConsumer consumer = session.createConsumer(topic);

    

    (7)、MessageListener

      音訊監聽器。假如注冊了音訊監聽器,一旦音訊抵達,將自動調用監聽器的onMessage辦法。EJB中的MDB(Message-Driven Bean)就是一種MessageListener。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved