1. 程式人生 > >ActiveMQ 伺服器的部署

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&amp;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 中,類似於資料庫的分庫分表。

4.2 更多細節