首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

ActiveMQ 入門實戰(一):安裝部署、JMS API、P2P 隊列與 Pub/Sub 主題模式完整代碼示例

     編輯:Java 綜合教學

環境準備

  1. 下載:Apache ActiveMQ 5.13.1;
  2. 解壓,根據 OS 執行啟動腳本(如 bin/macosx/activemq start 或 bin/activemq.bat start);
  3. 訪問管理控制台:https://localhost:8161/,默認帳號密碼 admin/admin;
  4. Eclipse 項目導入 activemq-home/lib 下所有 JAR 包。

三種代碼風格對比

1. 統一 JMS API 風格(推薦,與實現無關)

// Sender
ConnectionFactory cf = new ActiveMQConnectionFactory(
    ActiveMQConnection.DEFAULT_USER,
    ActiveMQConnection.DEFAULT_PASSWORD,
    "tcp://localhost:61616");
Connection conn = cf.createConnection();
conn.start();
Session session = conn.createSession(true, Session.AUTO_ACKNOWLEDGE);
Destination dest = session.createQueue("JMeterQueue");
MessageProducer producer = session.createProducer(dest);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
for (int i=1; i<=5; i++) {
    TextMessage msg = session.createTextMessage("ActiveMq send " + i);
    producer.send(msg);
}
session.commit();
conn.close();

// Receiver (同理創建 Consumer, 使用 receive 或 MessageListener)

2. P2P 隊列模式(QueueSender / QueueReceiver)

  • 使用 QueueConnectionFactory、QueueSession、Queue、QueueSender/QueueReceiver;
  • 隊列名在控制台創建或代碼中指定(如 mq.p2p.queue);
  • 特點:一條消息只被一個消費者消費,支持負載均衡。

3. 發布/訂閱模式(TopicSender / TopicReceiver)

  • 使用 TopicConnectionFactory、TopicSession、Topic、TopicPublisher/TopicSubscriber;
  • 主題名如 mq.topic;
  • 特點:一條消息分發給所有活躍訂閱者,需訂閱者先啟動(非持久訂閱)。

關鍵代碼片段(P2P 發送者)

public class QueueSender {
    static final String BROKER_URL = "tcp://localhost:61616";
    static final String DESTINATION = "mq.p2p.queue";
    public static void run() throws Exception {
        QueueConnectionFactory factory = new ActiveMQConnectionFactory(
            ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, BROKER_URL);
        QueueConnection conn = factory.createQueueConnection();
        conn.start();
        QueueSession session = conn.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);
        Queue queue = session.createQueue(DESTINATION);
        QueueSender sender = session.createSender(queue);
        sender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
        for (int i=0; i<5; i++) {
            sender.send(session.createTextMessage("發送消息第" + (i+1) + "條"));
        }
        session.commit();
        session.close(); conn.close();
    }
}

控制台驗證要點

  • 發送後,Queues 頁面 Messages Enqueued 增加;
  • 消費並 commit 後,Messages Dequeued 增加,Enqueued 減少;
  • 若未 commit,Deued 始終為 0,重啟消費者會重複收到。

學習路線建議

  1. 先跑通 統一 JMS API 風格,理解 Connection/Session/Producer/Consumer 生命週期;
  2. 對比 Queue/Topic 區別,體會「點對點」與「發布訂閱」語義差異;
  3. 嘗試持久化訂閱(createDurableSubscriber)、事務控制、消息確認模式(CLIENT_ACKNOWLEDGE);
  4. 進階:Spring JMS 整合、消息轉發、死信隊列、集群 HA(參考系列第二篇)。

ActiveMQ 作為成熟開源消息中間件,掌握其基礎 API 與兩大核心模式,是構建異步解耦、削峰填谷、分布式事務系統的敲門磚。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved