Java訊息佇列ActiveMQ (一)--JMS基本概念

來源:互聯網
上載者:User

標籤:啟動   point   擷取   sel   ber   ima   組件   同步   逾時   

摘要:The Java Message Service (JMS) API is a messaging standard that allows application components based on the Java Platform Enterprise Edition (Java EE) to create, send, receive, and read messages. It enables distributed communication that is loosely coupled, reliable, and asynchronous.

JMS(JAVA Message Service,javaMessage Service)API是一個Message Service的標準或者說是規範,允許應用程式組件基於JavaEE平台建立、發送、接收和讀取訊息。它使分布式通訊耦合度更低,Message Service更加可靠以及非同步

1、基本概念

   JMS是java的Message Service,JMS的用戶端之間可以通過JMS服務進行非同步訊息傳輸。

2、訊息模式Point-to-Point(P2P)
    1. P2P模式圖 

       

    2. 涉及到的概念 
      1. 訊息佇列(Queue)
      2. 寄件者(Sender)
      3. 接收者(Receiver)
      4. 每個訊息都被發送到一個特定的隊列,接收者從隊列中擷取訊息。隊列保留著訊息,直到他們被消費或逾時。
    3. P2P的特點

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

      如果你希望發送的每個訊息都應該被成功處理的話,那麼你需要P2P模式。

      Pub/Sub
    1. Pub/Sub模式圖 

       

    2. 涉及到的概念 
      1. 主題(Topic)
      2. 發行者(Publisher)
      3. 訂閱者(Subscriber) 
        用戶端將訊息發送到主題。多個發行者將訊息發送到Topic,系統將這些訊息傳遞給多個訂閱者。
    3. Pub/Sub的特點

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

      如果你希望發送的訊息可以不被做任何處理、或者被一個訊息者處理、或者可以被多個消費者處理的話,那麼可以採用Pub/Sub模型

 3、訊息的消費

在JMS中,訊息的產生和訊息是非同步。對於消費來說,JMS的訊息者可以通過兩種方式來消費訊息。

同步:訂閱者或接收者調用receive方法來接收訊息,receive方法在能夠接收到訊息之前(或逾時之前)將一直阻塞 。

非同步:訂閱者或接收者可以註冊為一個訊息監聽器。當訊息到達之後,系統自動調用監聽器的onMessage方法。

4、JMS編程模型在JMS中,訊息的產生和訊息是非同步。對於消費來說,JMS的訊息者可以通過兩種方式來消費訊息。
訂閱者或接收者調用receive方法來接收訊息,receive方法在能夠接收到訊息之前(或逾時之前)將一直阻塞

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。

舉例說明如下:

ConnectionFactory connectionFactory;// 串連工廠        Connection connection = null;// 串連        Session session;// 會話,接受或發送訊息的線程        Destination destination;// 訊息的目的地        MessageConsumer messageConsumer;// 訊息的消費者        // 執行個體化串連工廠        connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKERURL);        try {            // 通過串連工廠擷取串連            connection = connectionFactory.createConnection();            // 啟動串連            connection.start();            // 建立session            session=connection.createSession(false, Session.AUTO_ACKNOWLEDGE);            // 建立一個串連helloworld的訊息佇列            destination=session.createQueue("MQtest");                        //建立消費者模式            messageConsumer =session.createConsumer(destination);                            while(true){                                TextMessage textMessage = (TextMessage) messageConsumer.receive(100000);                if(textMessage!=null){                    System.out.println("收到的訊息:"+textMessage.getText());                }            }                    } catch (JMSException ex) {            ex.printStackTrace();        }
5、企業訊息系統的好處

如,應用程式A將Message發送到伺服器上,然後應用程式B從伺服器中接收A發來的訊息,通過這個圖我們一起來分析一下JMS的好處:

  1. 提供訊息靈活性
  2. 鬆散耦合
  3. 非同步性

Java訊息佇列ActiveMQ (一)--JMS基本概念

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.