ActiveMQ 伺服器的部署
ActiveMQ 是 Apache 流行、強大的開源訊息傳遞和整合模式伺服器,它完全支援 JMS 1.1(嚴格實現“點對點”和“釋出/訂閱”兩種訊息模型) 和 J2EE 1.4。作為實驗,本文實現了 ActiveMQ 單伺服器的安裝及其管理,並概述了叢集部署的方法。
作者:王克鋒
出處:https://kefeng.wang/2017/10/16/activemq-deploy/
版權:自由轉載-非商用-非衍生-保持署名,轉載請標明作者和出處。
1.概述
官網: http://activemq.apache.org/
Apache ActiveMQ 是最流行和最強大的開源訊息傳遞和整合模式伺服器。
Apache ActiveMQ 速度很快,支援許多跨語言客戶端和協議,隨附易於使用的企業整合模式和許多高階功能,同時完全支援 JMS 1.1 和 J2EE 1.4。
Apache ActiveMQ 是在 Apache 2.0許可下發布的。
ActiveMQ 支援 JMS 規範的兩種【訊息模型】:
- 點對點(queue, point to point):生產者生產併發布訊息到 queue 中,消費者從 queue 中取出並消費訊息(訊息被移出,只能被一個消費者收取)。
- 釋出/訂閱(topic, publish/subscribe):生產者將訊息釋出到 topic 中,同時有多個消費者訂閱並消費該訊息(同一訊息被所有訂閱者收取)。
2.安裝 ActiveMQ(5.15.3)
2.1 下載
2.2 安裝(解壓)
環境要求 JRE 1.7(ActiveMQ 5.10.0 以下可以為 JRE 1.6)。
wget https://mirrors.tuna .tsinghua.edu.cn/apache/activemq/5.15.3/apache-activemq-5.15.3-bin.tar.gz
sudo tar -zxf apache-activemq-5.15.3-bin.tar.gz -C /opt
2.3 設定環境變數
## sudo vim /etc/profile ## 所有使用者有效
export ACTIVEMQ_HOME=/opt/apache-activemq-5.15.3
export PATH=$PATH:$ACTIVEMQ_HOME/bin
儲存檔案,Linux 使用者重新登入後生效。
2.4 配置
## sudo vim $ACTIVEMQ_HOME/conf/activemq.xml
## 客戶端引數預設值: 監聽埠 61616, 最大連線數 1000, 最大訊息 100M
## 管理後臺引數預設值: 監聽埠 8161
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
2.5 啟動與停止
tail -f $ACTIVEMQ_HOME/data/activemq.log
sudo $ACTIVEMQ_HOME/bin/activemq console ## 作為“前臺程序”啟動(CTRL+C停止)
sudo $ACTIVEMQ_HOME/bin/activemq start ## 作為“守護程序”啟動
sudo $ACTIVEMQ_HOME/bin/activemq stop ## 停止“守護程序”
2.6 防火牆放行
如果非本機應用需要連線,必須把監聽埠放行。
### sudo vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8161 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 61616 -j ACCEPT
### 重啟生效: sudo systemctl restart iptables
3.管理
瀏覽器開啟: http://centos:8161/admin
使用者名稱/密碼: admin/admin(可以在 conf/users.properties 中修改)
- Home: 主機和版本等資訊
- Queues: 各佇列的資訊,包括名稱、生產個數/消費個數、各生產者/各消費者,可進行刪除操作等;
- Topics: 各主題的資訊,包括名稱、生產個數/消費個數、各生產者/各消費者等;
- Subscribers: 訂閱者;
- Connections: 各連線;
- Network
- Scheduled
- Send: 手工傳送JMS訊息。
4.高階用法
4.1 叢集部署
- 排他鎖可以是共享檔案或共享資料表;
- 叢集啟動時,首先奪得排他鎖的節點成為 Master 節點,對外提供服務;
- 其他節點(可以有多個)則作為 Slave 節點,不對外提供服務;
- 當 Master 節點故障時(網路中斷、應用異常等),某個 Slave 會奪得排他鎖而升級為 Master;
- 發生故障的前 Master 恢復時,只能作為 Slave 備用。
根據排他鎖實現方案,可分為以下三種:
- 共享檔案系統: 需要共享的檔案系統,如SAN;
- 共享資料庫: 需要共享資料庫,ActiveMQ 版本要求為 4.1+;
- ZooKeeper伺服器: 非常快,需要 ZooKeeper 伺服器,推薦 KahaDB 儲存,ActiveMQ 版本要求為 5.9.0+。
它使用 ZooKeeper(應該執行至少 3 個 ZooKeeper 伺服器節點)來協調叢集中的哪個節點成為主節點。
客戶端應該使用故障轉移傳輸連線到可用的代理:
failover:(tcp://broker1:61616,tcp://broker2:61616,tcp://broker3:61616)
由於只有 Master 對外提供服務,客戶端只能連線上當前 Master。
叢集擴充套件方案:
- 垂直擴充套件: 提升硬體效能(CPU/記憶體),改進 ActiveMQ 配置;
- 水平擴充套件: 不同業務型別的 queue/topic 拆分更多的 broker 中,類似於資料庫的分庫分表。