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

企業級項目實戰第十一章:ActiveMQ 訊息佇列整合與異步日誌落地

     編輯:Java 綜合教學

企業級項目實戰第十一章:ActiveMQ 訊息佇列整合與異步日誌落地

本章代碼基於第十章 (Redis 分散式緩存)。GitHub:https://github.com/zhaojigang/ssmm0

1. 訊息佇列基本流程

需求:註冊 admin 後異步寫入日誌到資料庫。分析:實際生產不直接寫資料庫 (日誌量大、頻繁),通常由 Nginx/後端產生日誌檔,定時任務配合 Shell/Python 正則過濾後入庫。此處示範異步寫入。

  • Server1:部署 ssmm0-userManagement (用戶管理)
  • Server2:部署 ssmm0-rpcWeb (模擬消費端)
  • Server3:部署 ActiveMQ 服務

Server1 執行註冊 → 寫入 DB → 發送日誌訊息到 ActiveMQ (異步,不等待消費) → 返回。
Server2 循環消費佇列訊息 → 寫入資料庫。

2. 訊息佇列作用

  • 異步處理
  • 解耦:生產者與消費者無直接依賴
  • 削峰填谷:大量請求先入佇列,再緩慢處理 (秒殺常用策略)

3. 兩種模式

  • P2P (Point-to-Point):一條訊息僅一個消費者消費,基於 Queue。流程:建連接工廠→連接→啟動→Session→Queue→Producer/Consumer→發送/接收。
  • Pub/Sub (發布-訂閱):訊息可被所有訂閱者消費,基於 Topic。流程類似,換成 Topic、Publisher、Subscriber+Listener。

4. 實戰 (基於 P2P)

模組結構與依賴

  • userManagement (war) → 依賴 data
  • rpcWeb (war) → 依賴 data
  • cache (jar)
  • rpc (jar, 含 mq/mina/netty) → 依賴 common
  • data (jar) → 依賴 cache, rpc
  • common (jar)

核心代碼

ActiveMQP2PUtil (rpc 模組):單例連接工廠、sendMessage(Serializable)、receiveMessage(MessageHandler) 死循環消費。
MessageHandler 介面:handle(Message)。
LogMessageHandler (data 模組):實作 Handler,注入 LogDao 將日誌寫入 DB。
AdminService.register:註冊成功後建立 Log 物件,呼叫 ActiveMQP2PUtil.sendMessage(log) 異步發送。
MessageReceiver (rpcWeb Controller):/mq/receive 端點呼叫 receiveMessage(handler) 開始消費。

配置檔

rpc_config.properties:activemq.queueURL=tcp://127.0.0.1:61616, activemq.queueName=adminQueue。
Spring 整合:spring-data.xml、spring.xml 掃描 data/rpc 模組 Bean。

5. 測試步驟

  1. 安裝 ActiveMQ 5.5.0,啟動 activemq.bat,訪問 https://127.0.0.1:8161/admin/queues.jsp 監控佇列。
  2. 啟動 userManagement (Jetty 8080),瀏覽器訪問 https://localhost:8080/admin/register?username=canglang25&password=1457890。
  3. 啟動 rpcWeb (Jetty 8081),瀏覽器訪問 https://localhost:8081/mq/receive (瀏覽器轉圈等待消費,關閉 Jetty 停止)。

Jetty 不同埠可同時啟動,同埠後啟動會覆蓋。

6. 總結

  • 訊息佇列入門簡單,精通很難
  • Git 基本用法參考《Pro Git 中文版》
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved