首頁 > 軟體

ActiveMQ的簡單使用

2020-06-16 17:18:42

本篇主要內容:
1、ActiveMQ安裝
2、佇列(queue)
3、主題(topic)

ActiveMQ安裝

1、下載:

http://activemq.apache.org/download.html

2、安裝:
我下載的是windows版本的,解壓。然後雙擊apache-activemq-5.14.3binwin64activemq.bat即可

3、存取:
http://127.0.0.1:8161/admin/ 使用者名稱/密碼:admin/admin

佇列(queue)

即一個訊息只能被一個消費者消費。

1、進入web管理介面

這裡看到佇列裡是沒有任何訊息的

2、編寫訊息生產者
第一步,引入jar

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-client</artifactId>
    <version>5.14.3</version>
</dependency>

第二步,編寫訊息生產者

package queues;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

import Javax.jms.*;
/**
 * 訊息生產者
 */
public class JMSProducer {
    //預設連線使用者名稱
    private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
    //預設連線密碼
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
    //預設連線地址
    private static final String BROKER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;

    public static void main(String[] args) {
        //連線工廠
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKER_URL);

        try {
            //連線
            Connection connection = connectionFactory.createConnection();
            //啟動連線
            connection.start();
            //建立session
            Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
            //訊息目的地
            Destination destination = session.createQueue("hello");
            //訊息生產者
            MessageProducer producer = session.createProducer(destination);
            //設定不持久化,此處學習,實際根據專案決定
            producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

            //傳送訊息
            for (int i = 0; i < 10; i++) {
                //建立一條文字訊息
                TextMessage message = session.createTextMessage("ActiveMQ:這是第 " + i + " 條訊息");
                //生產者傳送訊息
                producer.send(message);
            }

            session.commit();
            session.close();
            connection.close();
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}

這裡建立了名為“hello”的訊息佇列,並向訊息佇列傳送10條訊息。

第三步,編寫訊息消費者

package queues;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * 訊息消費者
 */
public class JMSConsumer {
    //預設連線使用者名稱
    private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
    //預設連線密碼
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
    //預設連線地址
    private static final String BROKER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;

    public static void main(String[] args) {
        //連線工廠
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKER_URL);
        try {
            //連線
            Connection connection = connectionFactory.createConnection();
            //啟動連線
            connection.start();
            //建立session
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            //訊息目的地
            Destination destination = session.createQueue("hello");
            //訊息消費者
            MessageConsumer consumer = session.createConsumer(destination);
            while (true) {
                TextMessage message = (TextMessage) consumer.receive();
                if (message != null) {
                    System.out.println("接收到訊息: " + message.getText());
                } else {
                    break;
                }
            }
            session.close();
            connection.close();
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}

這裡指向名為“hello”的訊息佇列,並向訊息佇列一直取訊息出來。

3、測試。

先執行訊息生產者。

發現比之前多了一個名為hello的訊息佇列,並有10條訊息進入佇列了。

執行訊息消費者

發現消費者消費了之前發的10個訊息。

再次檢視web-queues頁面。

發現比之前多了一個消費者,而且有10條訊息出佇列了。

再啟動一個訊息消費者

發現控制台沒列印,說明佇列裡的訊息已經被消費完了。

再次啟動訊息生產者

發現2個消費者各消費5條訊息,說明佇列裡的訊息只容許被一個消費者消費。

此時,web-queues頁面應該是有2個消費者,共生成和消費20條訊息。

主題(topic)

即一個訊息可以被多個消費者接收

只需要將佇列中的如下程式碼

//訊息目的地
Destination destination = session.createQueue("hello");

改為

//訊息目的地
Destination destination = session.createTopic("hello");

檢視web-topics,如下:

啟動2個消費者,然後啟動生產者
檢視web-topics,如下:

發現2個消費者都消費了這10條訊息。

現在我們基本完成簡單的使用ActiveMQ了。

推薦閱讀:

Spring+Log4j+ActiveMQ實現遠端記錄紀錄檔——實戰+分析 http://www.linuxidc.com/Linux/2015-12/126163.htm

Spring下ActiveMQ實戰  http://www.linuxidc.com/Linux/2015-11/124854.htm

Java訊息佇列--ActiveMQ 實戰 http://www.linuxidc.com/Linux/2016-12/138848.htm

CentOS 6.5啟動ActiveMQ報錯解決 http://www.linuxidc.com/Linux/2015-08/120898.htm

ActiveMQ部署步驟和後台管理網站Service Unavailable問題解決  http://www.linuxidc.com/Linux/2016-11/137050.htm

Linux環境下面ActiveMQ埠號設定和WEB埠號設定 http://www.linuxidc.com/Linux/2012-01/51100.htm


IT145.com E-mail:sddin#qq.com