ActiveMQ- 安装篇

本贴最后更新于 2111 天前,其中的信息可能已经时异事殊

一、下载与安装

1.下载

ActiveMQ5.15.8 linux 版本
http://activemq.apache.org/activemq-5158-release.html
1.png

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.png

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 启动要求主机名不包含下划线
4.png
如果系统没有 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&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="amqp" uri="amqp://127.0.0.1:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="stomp" uri="stomp://127.0.0.1:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="mqtt" uri="mqtt://127.0.0.1:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="ws" uri="ws://127.0.0.1:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
 </transportConnectors>

2.局域网访问 /conf/activemq.xml

 <transportConnectors>

            <!--服务器本地ip 非公网ip-->
            <transportConnector name="openwire" uri="tcp://127.27.3.5:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="amqp" uri="amqp://127.27.3.5:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="stomp" uri="stomp://127.27.3.5:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="mqtt" uri="mqtt://127.27.3.5:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="ws" uri="ws://127.27.3.5:61614?maximumConnections=1000&amp;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&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;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

  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 668 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...