ActiveMQ執行個體教程–入門層級

來源:互聯網
上載者:User
文章目錄
  • 3.1.Sender.java
  • 3.2.Receiver.java
ActiveMQ入門執行個體
1.下載ActiveMQ

去官方網站下載:http://activemq.apache.org/

2.運行ActiveMQ

解壓縮apache-activemq-5.5.1-bin.zip,然後雙擊apache-activemq-5.5.1\bin\activemq.bat運行ActiveMQ程式。

啟動ActiveMQ以後,登陸:http://localhost:8161/admin/,建立一個Queue,命名為FirstQueue。

3.建立Eclipse項目並運行

建立project:ActiveMQ-5.5,並匯入apache-activemq-5.5.1\lib目錄下需要用到的jar檔案,項目結構如所示:

3.1.Sender.java
package com.xuwei.activemq;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.DeliveryMode;import javax.jms.Destination;import javax.jms.MessageProducer;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;public class Sender {    private static final int SEND_NUMBER = 5;    public static void main(String[] args) {        // ConnectionFactory :串連工廠,JMS 用它建立串連        ConnectionFactory connectionFactory;        // Connection :JMS 用戶端到JMS Provider 的串連        Connection connection = null;        // Session: 一個發送或接收訊息的線程        Session session;        // Destination :訊息的目的地;訊息發送給誰.        Destination destination;        // MessageProducer:訊息寄件者        MessageProducer producer;        // TextMessage message;        // 構造ConnectionFactory執行個體對象,此處採用ActiveMq的實現jar        connectionFactory = new ActiveMQConnectionFactory(                ActiveMQConnection.DEFAULT_USER,                ActiveMQConnection.DEFAULT_PASSWORD,                "tcp://localhost:61616");        try {            // 構造從工廠得到連線物件            connection = connectionFactory.createConnection();            // 啟動            connection.start();            // 擷取操作串連            session = connection.createSession(Boolean.TRUE,                    Session.AUTO_ACKNOWLEDGE);            // 擷取session注意參數值xingbo.xu-queue是一個伺服器的queue,須在在ActiveMq的console配置            destination = session.createQueue("FirstQueue");            // 得到訊息產生者【寄件者】            producer = session.createProducer(destination);            // 設定不持久化,此處學習,實際根據項目決定            producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);            // 構造訊息,此處寫死,項目就是參數,或者方法擷取            sendMessage(session, producer);            session.commit();        } catch (Exception e) {            e.printStackTrace();        } finally {            try {                if (null != connection)                    connection.close();            } catch (Throwable ignore) {            }        }    }    public static void sendMessage(Session session, MessageProducer producer)            throws Exception {        for (int i = 1; i <= SEND_NUMBER; i++) {            TextMessage message = session                    .createTextMessage("ActiveMq 發送的訊息" + i);            // 發送訊息到目的地方            System.out.println("發送訊息:" + "ActiveMq 發送的訊息" + i);            producer.send(message);        }    }}
3.2.Receiver.java
package com.xuwei.activemq;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.Destination;import javax.jms.MessageConsumer;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;public class Receiver {    public static void main(String[] args) {        // ConnectionFactory :串連工廠,JMS 用它建立串連        ConnectionFactory connectionFactory;        // Connection :JMS 用戶端到JMS Provider 的串連        Connection connection = null;        // Session: 一個發送或接收訊息的線程        Session session;        // Destination :訊息的目的地;訊息發送給誰.        Destination destination;        // 消費者,訊息接收者        MessageConsumer consumer;        connectionFactory = new ActiveMQConnectionFactory(                ActiveMQConnection.DEFAULT_USER,                ActiveMQConnection.DEFAULT_PASSWORD,                "tcp://localhost:61616");        try {            // 構造從工廠得到連線物件            connection = connectionFactory.createConnection();            // 啟動            connection.start();            // 擷取操作串連            session = connection.createSession(Boolean.FALSE,                    Session.AUTO_ACKNOWLEDGE);            // 擷取session注意參數值xingbo.xu-queue是一個伺服器的queue,須在在ActiveMq的console配置            destination = session.createQueue("FirstQueue");            consumer = session.createConsumer(destination);            while (true) {                //設定接收者接收訊息的時間,為了便於測試,這裡誰定為100s                TextMessage message = (TextMessage) consumer.receive(100000);                if (null != message) {                    System.out.println("收到訊息" + message.getText());                } else {                    break;                }            }        } catch (Exception e) {            e.printStackTrace();        } finally {            try {                if (null != connection)                    connection.close();            } catch (Throwable ignore) {            }        }    }}
4.注意事項
  1. 最後接收者跟寄件者在不同的機器上測試
  2. 項目所引用的jar最後在ActiveMQ下的lib中找,這樣不會出現版本衝突。
5.測試過程

因為是在單機上測試,所以需要開啟兩個eclipse,每一個eclipse都有自身的workspace。我們在eclipse1中運行Receiver,在eclipse2中運行Sender。

剛開始eclipse1中運行Receiver以後console介面沒有任何資訊,在eclipse2中運行Sender以後,eclipse2中的console顯示如下資訊:

發送訊息:ActiveMq 發送的訊息1
發送訊息:ActiveMq 發送的訊息2
發送訊息:ActiveMq 發送的訊息3
發送訊息:ActiveMq 發送的訊息4
發送訊息:ActiveMq 發送的訊息5

而回到eclipse1中發現console介面出現如下資訊:

收到訊息ActiveMq 發送的訊息1
收到訊息ActiveMq 發送的訊息2
收到訊息ActiveMq 發送的訊息3
收到訊息ActiveMq 發送的訊息4
收到訊息ActiveMq 發送的訊息5

 PS:2012-2-27

今天發現測試並不需要開啟兩個eclipse,在一個eclipse下頁可以啟動多個程式,並且有多個console,在上面的Receiver.java中,設定一個較大的時間,比如receive(500000),如下代碼所示:

TextMessage message = (TextMessage) consumer.receive(500000);

這個時候運行Receiver.java的話,會使得這個Receiver.java一直運行500秒,在eclipse中可以發現:

點擊那個紅色方塊可以手動停止運行程式。

運行玩receiver以後我們在運行sender,在運行完sender以後,我們要切換到receiver的console,如所示:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.