# springboot-order-mybaits-activeMQ
**Repository Path**: dsp321/springboot-order-mybaits-activeMQ
## Basic Information
- **Project Name**: springboot-order-mybaits-activeMQ
- **Description**: 项目主框架采用springboot,介绍Zookeeper集群安装和ActiveMQ的高可用集群安装方式,以及基于ActiveMQ简单的消息队列应用场景!
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://git.oschina.net/tdcg/springboot-order-mybaits-activeMQ
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 27
- **Created**: 2017-10-29
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
#springboot-order-mybaits-activeMQ
项目主框架采用springboot,介绍Zookeeper集群安装和ActiveMQ的高可用集群安装方式,以及基于ActiveMQ简单的消息队列应用场景!
### 一、虚拟机安装
```
开启一个虚拟机,虚拟机安装非本文范畴,可查阅相关资料。
在安装Zookeeper,ActiveMQ之前需要先将虚拟机防火墙关闭,并配置好网络。
虚拟机IP设置为:10.16.70.134,此处可根据自己网络环境自行设置。
需要保证虚拟机可连接外网,以方便执行wget,yum等命令安装相关软件。
需要保证虚拟机中已安装JDK1.8,并且已配置好环境变量,JDK安装非本文范畴,可查阅相关资料。
```
### 二、Zookeeper 集群搭建
##### 下载并上传zookeeper-3.4.6.tar.gz到各个服务器的/usr/local/目录,或者使用wget命令,如下:
```
cd /usr/local/
wget http://apache.fayea.com/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
tar -zxvf zookeeper-3.4.6.tar.gz
```
##### 在各个服务器上解压zookeeper安装包,并按节点号对zookeeper目录重命名
```
# 服务器1
cp -r zookeeper-3.4.6 zookeeper-3.4.6_1
# 服务器2
cp -r zookeeper-3.4.6 zookeeper-3.4.6_2
# 服务器3
cp -r zookeeper-3.4.6 zookeeper-3.4.6_3
```
##### 在各zookeeper节点目录下创建以下目录
```
cd /usr/local/zookeeper-3.4.6_1
mkdir data
mkdir logs
cd /usr/local/zookeeper-3.4.6_2
mkdir data
mkdir logs
cd /usr/local/zookeeper-3.4.6_3
mkdir data
mkdir logs
```
##### 将各节点zookeeper/zookeeper-3.4.6_x/conf目录下的zoo_sample.cfg文件拷贝一份,命名为zoo.cfg:
```
cd /usr/local/zookeeper-3.4.6_1/conf
cp zoo_sample.cfg zoo.cfg
cd /usr/local/zookeeper-3.4.6_2/conf
cp zoo_sample.cfg zoo.cfg
cd /usr/local/zookeeper-3.4.6_3/conf
cp zoo_sample.cfg zoo.cfg
```
##### 修改 zoo.cfg 配置文件
```
cd /usr/local/zookeeper-3.4.6_1/conf
# 设置内容如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-3.4.6_1/data
dataLogDir=/usr/local/zookeeper-3.4.6_1/logs
clientPort=2181
server.1=10.16.70.134:2881:3881
server.2=10.16.70.134:2882:3882
server.3=10.16.70.134:2883:3883
# -----------------------------------
cd /usr/local/zookeeper-3.4.6_2/conf
vi zoo.cfg
# 设置内容如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-3.4.6_2/data
dataLogDir=/usr/local/zookeeper-3.4.6_2/logs
clientPort=2182
server.1=10.16.70.134:2881:3881
server.2=10.16.70.134:2882:3882
server.3=10.16.70.134:2883:3883
# -----------------------------------
cd /usr/local/zookeeper-3.4.6_3/conf
vi zoo.cfg
# 设置内容如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-3.4.6_3/data
dataLogDir=/usr/local/zookeeper-3.4.6_3/logs
clientPort=2183
server.1=10.16.70.134:2881:3881
server.2=10.16.70.134:2882:3882
server.3=10.16.70.134:2883:3883
```
##### 在dataDir=/usr/local/zookeeper-3.4.6_x/data下创建 myid 文件
```
vi /usr/local/zookeeper-3.4.6_1/data/myid #设置值为1
vi /usr/local/zookeeper-3.4.6_2/data/myid #设置值为2
vi /usr/local/zookeeper-3.4.6_3/data/myid #设置值为3
```
##### 启动并查看zookeeper:
```
cd /usr/local
/usr/local/zookeeper-3.4.6_1/bin/zkServer.sh start
/usr/local/zookeeper-3.4.6_2/bin/zkServer.sh start
/usr/local/zookeeper-3.4.6_3/bin/zkServer.sh start
```
##### 验证zookeeper启动情况
```
/usr/local/zookeeper-3.4.6_1/bin/zkServer.sh status
/usr/local/zookeeper-3.4.6_2/bin/zkServer.sh status
/usr/local/zookeeper-3.4.6_3/bin/zkServer.sh status
```
* 如果启动成功,三台机器结果类似如下,标红部分为一个leader,两个follower:
```
[root@centos7 local]# /usr/local/zookeeper-3.4.6_1/bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6_1/bin/../conf/zoo.cfg
Mode: "follower"
[root@centos7 local]# /usr/local/zookeeper-3.4.6_2/bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6_2/bin/../conf/zoo.cfg
Mode: "leader"
[root@centos7 local]# /usr/local/zookeeper-3.4.6_3/bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6_3/bin/../conf/zoo.cfg
Mode: "follower"
```
* zookeeper集群搭建成功
### 三、ActiveMQ集群集群搭建
##### 下载并上传apache-activemq-5.9.0-bin.tar.gz到各个服务器的/usr/local/目录,或者使用wget命令,如下:
```
cd /usr/local/
wget wget http://archive.apache.org/dist/activemq/apache-activemq/5.9.0/apache-activemq-5.9.0-bin.tar.gz
tar -zxvf apache-activemq-5.9.0-bin.tar.gz
```
##### 在各个服务器上解压ActiveMQ安装包,并按节点号对ActiveMQ目录重命名
```
# 服务器1
cp -r apache-activemq-5.9.0 activemq-5.9.0_1
# 服务器2
cp -r apache-activemq-5.9.0 activemq-5.9.0_2
# 服务器3
cp -r apache-activemq-5.9.0 activemq-5.9.0_3
```
#### 在3个ActiveMQ节点中配置conf/jetty.xml中的监控端口
```
# 节点1
# 节点2
# 节点3
```
#### broker-name的统一
```
# 将broker标签的brokerName属性设置为统一的值,我将这个值设置为“order”,只有三个实例的brokerName一致,zookeeper才能识别它们属于同一个集群。
```
#### persistenceAdapter的配置
* persistenceAdapter设置持久化方式,主要有三种方式:kahaDB(默认方式)、数据库持久化、levelDB(v5.9.0提供支持)。
* 本文采用levelDB来进行持久化,并使用zookeeper实现集群的高可用,配置如下:
```
# 首先注释掉原来kahaDB的持久化方式,然后配置levelDB+zookeeper的持久化方式
# 节点1
# 节点2
# 节点3
```
#### 修改各节点的消息端口
```
节点1:
节点2:
节点3:
```
#### 按顺序启动 3 个 ActiveMQ 节点:
```
节点1:
/usr/local/activemq-5.9.0_1/bin/activemq start
节点2:
/usr/local/activemq-5.9.0_2/bin/activemq start
节点3:
/usr/local/activemq-5.9.0_3/bin/activemq start
```
#### 监听日志:
```
节点1:
tail -f /usr/local/activemq-5.9.0_1/data/activemq.log
节点2:
tail -f /usr/local/activemq-5.9.0_2/data/activemq.log
节点3:
tail -f /usr/local/activemq-5.9.0_3/data/activemq.log
```
#### 集群搭建完毕
* 说明1:本文采用的是官网中提到的三种集群方案中的<可复制的LevelDB>,其它方式请参考官网。
* 说明2:经测试,此部署方案继承了Zookeeper的特性,即需要有大于一半机器存活,则集群状态正常
* 说明3:由于ActiveMQ 的客户端只能访问Master的Broker,其他处于Slave的Broker不能访问。所以客户端连接Broker应该使用failover协议。
即:failover:(tcp://10.16.70.134:61616,tcp://10.16.70.134:61617,tcp://10.16.70.134:61618)?randomize=false
* 说明4:三个节点的管理地址:
http://10.16.70.134:8161/admin/index.jsp
http://10.16.70.134:8162/admin/index.jsp
http://10.16.70.134:8163/admin/index.jsp
因为使用zookeeper做负载均衡,三台只有一台是master,其他两台处于等待状态,所以只有其中一台提供服务,但一旦这台服务器宕机以后,会有另外一台顶替上来,所以其他几个ip地址是打不开的,只有一台能打开。
###参考
http://zookeeper.apache.org/
http://activemq.apache.org/
### 期望
欢迎提出更好的意见,帮助完善我们的项目,以督促我们前行!
### 版权
[Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0)
### 捐赠
