CentOS7.6安装配置ActiveMQ

53 阅读4分钟

CentOS7.6安装配置ActiveMQ

✅ 准备工作

JDK17安装包

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

配置成功如下图 image-20240607093839804.png

✅ 安装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服务。

image-20240607162334351.png

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管理平台

image-20240607162639629.png

5.2 排查运行失败

如果页面无法访问的话,在服务器终端ActiveMQ的bin目录下输入

./activemq console ##查看日志排查问题

就像我一开始配置activemq.xml的时候漏了一个标签,导致运行失败,通过查找日志发现问题并解决

image-20240607163041358.png

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

出现下图说明成功 image-20240611165237549.png

至此,CentOS7.6安装ActiveMQ教程结束,从安装->配置->自启动服务。撒花🎉🎉