一、下载与安装
1.下载
ActiveMQ5.15.8 linux 版本
http://activemq.apache.org/activemq-5158-release.html
2.安装
选择一个安装文件夹(按需处理)
cp /software/apache-activemq-5.15.8-bin.tar.gz ./
解压
tar zxvf apache-activemq-5.15.8-bin.tar.gz
mv apache-activemq-5.15.8 activemq
二、启动 ActiveMQ
1.启动
cd activemq/bin/
./activemq start
INFO: Loading '/root/activemq//bin/env'
INFO: Using java '/usr/java/jdk-11.0.2/bin/java'
INFO: Starting - inspect logfiles specified in logging.properties and log4j.properties to get details
INFO: pidfile created : '/root/activemq//data/activemq.pid' (pid '1520')
2.查看状态
ps -ef |grep activemq
root 1520 1 7 10:13 pts/0 00:00:07 /usr/java/jdk-11.0.2/bin/java -Xms64M -Xmx1G -Djava.util.logging.config.file=logging.properties -Djava.security.auth.login.config=/root/activemq//conf/login.config -Dcom.sun.management.jmxremote -Djava.awt.headless=true -Djava.io.tmpdir=/root/activemq//tmp -Dactivemq.classpath=/root/activemq//conf:/root/activemq//../lib/: -Dactivemq.home=/root/activemq/ -Dactivemq.base=/root/activemq/ -Dactivemq.conf=/root/activemq//conf -Dactivemq.data=/root/activemq//data -jar /root/activemq//bin/activemq.jar start
root 1882 28783 0 10:15 pts/0 00:00:00 grep --color=auto activemq
出现以上信息则代表 activemq 启动成功
在浏览器中输入 http://xxxx.xxxx.xxxx.xxxx:8161/
3.启动失败
新手 linux 第一次基本上都是以启动失败告终 ^_^,因此请往下看~
3.1 云服务器虚拟机(此处以腾讯云为例)
如果启动失败,先要查看 ActiveMQ 日志
日志默认存放位置:activemq/data/activemq.log
在日志里直接搜索[nest],找到报错地点:
nested exception is java.net.URISyntaxException: Illegal character in hostname at index 7: ws://VM_0_9_centos:61614?maximumConnections=1000&wireFormat.maxFrameSize=104 857600
原因:
1).主机名中含有下划线,activemq 启动要求主机名不包含下划线
如果系统没有 ws 接口需求,删掉 conf/activemq.xml 中上图圈中内容即可。
如果系统需要 ws 接口,则需要更改服务器 hostname,修改方法如下:
修改下/etc/hosts 文件
修改/etc/cloud/templates/hosts.redhat.tmpl
127.0.0.1 xxxxMQ xxxxMQ #修改此处
127.0.0.1 localhost.localdomain localhost
127.0.0.1 localhost4.localdomain4 localhost4
::1 xxxxMQ xxxxMQ #修改此处
::1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
如果系统要求外网访问 则需要执行下面的命令( 修改主机名称需要慎重考虑一下,有可能会造成某些云服务监控软件异常 )
hostnamectl set-hostname xxxxMQ
修改完成后,重启服务器
reboot
运行 ActiveMQ 查看结果
3.3 修改主机名信息继续抛异常
查看服务器端口是否开放,8161、61616、5672、61613、1883、61614
查看想开的端口是否已开 # firewall-cmd --query-port=666/tcp 提示no表示未开
开永久端口号 firewall-cmd --add-port=666/tcp --permanent 提示 success 表示成功
重新载入配置 # firewall-cmd --reload 比如添加规则之后,需要执行此命令
再次查看想开的端口是否已开 # firewall-cmd --query-port=666/tcp 提示yes表示成功
若移除端口 # firewall-cmd --permanent --remove-port=666/tcp
修改完成后,重新启动查看结果。
三、IP 配置访问权限
1.本机访问 /conf/activemq.xml
<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://127.0.0.1:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp" uri="amqp://127.0.0.1:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://127.0.0.1:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://127.0.0.1:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://127.0.0.1:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
2.局域网访问 /conf/activemq.xml
<transportConnectors>
<!--服务器本地ip 非公网ip-->
<transportConnector name="openwire" uri="tcp://127.27.3.5:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp" uri="amqp://127.27.3.5:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://127.27.3.5:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://127.27.3.5:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://127.27.3.5:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
3.外网访问 /conf/activemq.xml
<transportConnectors>
<!--0.0.0.0-->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
四、安全配置
ActiveMQ 分为 2 个安全配置:一个是 Web 控制台的安全配置;另外一个是对于队列/主题的访问安全配置。
1.Web 控制台安全配置
修改端口
vi activemq/conf/jetty.xml
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
<!-- 修改port,端口自定义 -->
<property name="host" value="0.0.0.0"/>
<property name="port" value="8161"/>
</bean>
修改登录用户名密码
vi activemq/conf/jetty-realm.properties
# Defines users that can access the web (console, demo, etc.)
# username: password [,rolename ...]
#用户名:密码,用户组
admin: admin, admin
user: user, user
重启 ActiveMQ,查看修改是否成功。
2.队列/主题的访问安全配置
客户端三种权限:read(读取队列),write(写入队列),admin(主题不存在时是否可以创建队列)
有两种安全配置策略:Simple Authentication(简单的身份验证)和 JAAS 身份验证
2.1 Simple Authentication(简单的身份验证)
vi activemq/conf/activemq.xml
在文件中加入以下内容,如配置了 systemUsage,应该放到 systemUsage 前.
<plugins>
<!-- Configure authentication; Username, passwords and groups -->
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="admin" password="admin" groups="users,admins"/>
<authenticationUser username="user" password="user" groups="users"/>
<authenticationUser username="guest" password="${guest.password}" groups="guests"/>
</users>
</simpleAuthenticationPlugin>
</plugins>
占位引用可在 activemq/conf/credential.properties 中配置
activemq.username=system
activemq.password=manager
guest.password=password
2.2 JAAS 身份验证
vi activemq/conf/activemq.xml
在文件中加入以下内容,如配置了 systemUsage,应该放到 systemUsage 前.
<plugins>
<!--use JAAS to authenticate using the login.config file on the classpath to configure JAAS -->
<!--注意:configuration=”activemq”,这里的名字与login.config中的名字对应上-->
<jaasAuthenticationPlugin configuration="activemq" />
<!-- lets configure a destination based authorization mechanism -->
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<!-->表示通配符,例如USERS.>表示以USERS.开头的主题,>表示所有主题,read表示读的权限,write表示写的权限,admin表示是否能创建-->
<authorizationEntry queue=">" read="admins" write="admins" admin="admins" />
<authorizationEntry topic=">" read="admins" write="admins" admin="admins" />
<authorizationEntry queue="ActiveMQ.Advisory.>" read="tests" write="tests" admin="tests" />
<authorizationEntry topic="ActiveMQ.Advisory.>" read="tests" write="tests" admin="tests" />
<!-- tests组具有tests.>的queue和topic的所有权限,没有其他的权限 -->
<authorizationEntry queue="test.>" read="tests" write="tests" admin="tests" />
<authorizationEntry topic="test.>" read="tests" write="tests" admin="tests" />
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>
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";
};
用户名、密码文件 users.properties
#用户名=密码
admin=admin
test=123
分组文件 groups.properties
#角色=用户1,用户2
admins=admin
tests=test
重启服务,客户端连接服务测试。
更多配置
参考官网 http://activemq.apache.org/security.html
四、本文参考其他博客
1.腾讯云启动失败 https://blog.csdn.net/qq_38880340/article/details/85147033
2.ActiveMQ 安全配置 https://blog.csdn.net/chengshiep/article/details/50811221
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于