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 下载
http://activemq.apache.org/download.html
http://activemq.apache.org/activemq-5153-release.html
根据操作系统下载:Linux | Windows
2.2 安装(解压)
环境要求 JRE 1.7(ActiveMQ 5.10.0 以下可以为 JRE 1.6)。1
2wget 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 设置环境变量
1 | # sudo vim /etc/profile ## 所有用户有效 |
保存文件,Linux 用户重新登录后生效。
2.4 配置
1 | ## sudo vim $ACTIVEMQ_HOME/conf/activemq.xml |
2.5 启动与停止
1 | tail -f $ACTIVEMQ_HOME/data/activemq.log |
2.6 防火墙放行
如果非本机应用需要连接,必须把监听端口放行。1
2
3
4### 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 集群部署
文档: http://activemq.apache.org/masterslave.html
常用方案是基于排他锁的 Master-Slave 架构:
- 排他锁可以是共享文件或共享数据表;
- 集群启动时,首先夺得排他锁的节点成为 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 中,类似于数据库的分库分表。