CentOS7.6安装配置ActiveMQ
✅ 准备工作
✅ 安装Java环境
1 上传jdk到服务器目标目录
scp -r /Users/yourName/Downloads/jdk-17_linux-x64_bin.tar.gz root@yourIp:/opt/Java
2 解压jdk
tar -zxvf jdk-17_linux-x64_bin.tar.gz
3 配置环境变量
vim ~/.bashrc
写入下列内容
#set java environment
export JAVA_HOME=/opt/Java/jdk-17.0.10
export JRE_HOME=/opt/Java/jdk-17.0.10/jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
使该文件生效
source ~/.bashrc
查看环境是否配置好
java -version
配置成功如下图
✅ 安装ActiveMQ
1 上传ActiveMQ安装包到服务器目标目录
scp -r /Users/yourName/Downloads/apache-activemq-6.1.2-bin.tar.gz root@yourIp:/opt/ActiveMq
2 解压文件
tar -zxvf apache-activemq-6.1.2-bin.tar.gz
3 配置用户
去conf文件下
cd /opt/ActiveMq/apache-activemq-6.1.2/conf
3.1 添加用户
打开编辑groups.properties 添加users用户组
vim groups.properties
添加以下内容
users=user ##多个用户的话用逗号隔开 users=user1,user2
打开编辑users.properties 添加user用户及密码
vim users.properties
添加以下内容
user=password ##格式 用户=密码
3.2 STOMP客户端权限控制
编辑activemq.xml
vim activemq.xml
3.2.1 基于JAAS进行用户和权限配置
ActiveMQ的login.config默认配置如下
activemq {
org.apache.activemq.jaas.PropertiesLoginModule required
org.apache.activemq.jaas.properties.user="users.properties"
org.apache.activemq.jaas.properties.group="groups.properties";
};
该配置与jaasAuthenticationPlugin标签的configuration属性形成映射,使STOMP客户端账户与WEB端账户保持一致
在标签内添加以下内容
<plugins>
<jaasAuthenticationPlugin configuration="activemq" />
<authorizationPlugin>
<map>
<authorizationMap>
<!-- users用户组对所有主题和队列只有读的权限,admins用户组有读写、操作的权限 -->
<authorizationEntries>
<authorizationEntry queue=">" read="users,admins" write="admins" admin="admins"/>
<authorizationEntry topic=">" read="users,admins" write="admins" admin="admins"/>
<authorizationEntry queue="ActiveMQ.Advisory.>" read="users,admins" write="admins" admin="admins"/>
<authorizationEntry topic="ActiveMQ.Advisory.>" read="users,admins" write="admins" admin="admins"/>
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>
3.2.2 基于simpleAuthenticationPlugin进行用户和权限配置
同样是在标签内添加,STOMP客户端账户可以与WEB端账户不一致
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="stompUser" password="user" groups="users"/>
<authenticationUser username="stompAdmin" password="admin" groups="admins"/>
</users>
</simpleAuthenticationPlugin>
<authorizationPlugin>
<map>
<authorizationMap>
<!-- users用户组对所有主题和队列只有读的权限,admins用户组有读写、操作的权限 -->
<!-- 这里有个问题,当users用户组不具备操作的权限的时候无法监听对应的队列和主题,但是JAAS是可以的 -->
<authorizationEntries>
<authorizationEntry queue=">" read="users,admins" write="admins" admin="admins"/>
<authorizationEntry topic=">" read="users,admins" write="admins" admin="admins"/>
<authorizationEntry queue="ActiveMQ.Advisory.>" read="users,admins" write="admins" admin="admins"/>
<authorizationEntry topic="ActiveMQ.Advisory.>" read="users,admins" write="admins" admin="admins"/>
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>
3.2.3 浅谈JAAS (Java Authentication and Authorization Service)和simpleAuthenticationPlugin
两者都是对角色(用户组)的权限配置,从而控制用户的权限。simpleAuthenticationPlugin插件适用于比较简单用户较少的认证情况,并且用户和密码都是通过明文写入在activemq.xml中。JAAS是一种认证和授权机制,可以通过不同的数据源来获取用户和权限信息,支持多种登陆模块。从两者的定位看,就可以明确simpleAuthenticationPlugin是ActiveMQ控制用户权限的一种实现,而JAAS是符合ActiveMQ用户权限控制的一中抽象规则,所有可以片面的得出JAAS具备扩张性强及灵活的特点。
4 运行远程访问
4.1 ActiveMQ配置远程访问
编辑jetty.xml
vim jetty.xml
找到id为jettyPort的标签,如下
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
<!-- the default port number for the web console -->
<property name="host" value="127.0.0.1"/>
<property name="port" value="8161"/>
</bean>
将127.0.0.1改为0.0.0.0
4.2 云服务器配置安全组
在网络于安全的安全组入方向添加如下规则,保证本地正常访问云端MQ服务。
5 启动ActiveMQ
5.1 成功运行进入到bin目录
cd /opt/ActiveMq/apache-activemq-6.1.2/bin
./activemq start # 运行ActiveMQ
访问http://yourIp:8161/admin/topics.jsp查看是否运行成功,成功则如下图输入users.properties中配置的账户密码便可登陆到Web管理平台
5.2 排查运行失败
如果页面无法访问的话,在服务器终端ActiveMQ的bin目录下输入
./activemq console ##查看日志排查问题
就像我一开始配置activemq.xml的时候漏了一个标签,导致运行失败,通过查找日志发现问题并解决
5.3 暂停运行
./activemq stop
6 开机自启动
6.1 创建执行用户
创建用户组
sudo groupadd activemq
创建用户mquser,并添加到activemq用户组下,并限定该用户用于特定服务的用户
sudo useradd -g activemq -s /bin/false mquser
将/opt/ActiveMq/apache-activemq-6.1.2目录的所有权赋予给新建的mquser
sudo chown -R mquser:activemq /opt/ActiveMq/apache-activemq-6.1.2
6.2 编写自启动脚本
在/etc/systemd/system/目录下创建我们的自启动服务
vim /etc/systemd/system/activeMq.service
在文件内容写入以下内容,该服务在网络服务启动后才启动(After=network.target),分别配置启动MQ服务命令、用户及用户组。在服务器因异常退出(Restart=on-failure)的时候会尝试5次(RestartSec=5)重启。
[Unit]
Description= ActiveMQ Self Start
After=network.target
[Service]
ExecStart=/opt/ActiveMq/apache-activemq-6.1.2/bin/activemq start
User=mquser
Group=activemq
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
重新加载systemd配置(注:新建或者修改都需要重新加载)
sudo systemctl daemon-reload
设置该项自启动服务在系统启动时启动
sudo systemctl enable activeMq ## 启用activemq.service服务
sudo systemctl start activeMq ## 立即启动
验证服务状态
sudo systemctl status activeMq
出现下图说明成功
至此,CentOS7.6安装ActiveMQ教程结束,从安装->配置->自启动服务。撒花🎉🎉