基于ActiveMQ搭建MQTT服务备忘(一):再谈账户管理

(1)为什么写这个话题(Why)

读万卷书不如行千里路。这次搭建MQTT服务,遇到了一些误解,特此记录备忘。
主要包括:
(1)服务(Broker)的账户管理与网页管理平台的账户
(2)与web应用的集成(Spring系)

(2)ActiveMQ版本选择

因为JAVA环境是JDK 8,所以按兼容性考虑选择了ActiveMQ 5.15的最后版本5.15.15。
如果你是JDK 11则可考虑ActiveMQ的最新版本5.17或5.18。
ActiveMQ支持MQTT v3.1.1 and v3.1。

(3)ActiveMQ账户管理的场景

作为回顾,ActiveMQ服务器的账户管理可分为2个部分:服务(Broker)的账户管理和网页管理平台的,两者之间甚至是毫无干系。
首先,服务(Broker)是核心,即:即使不登录网页管理平台,MQTT服务依旧运行。
其次,网页管理平台是便利化工具,方便用户使用UI查看主题(Topics)的运行情况。

(3.1)服务(Broker)的账户管理

涉及到目录conf下的3个文件:activemq.xml、groups.properties、credentials.properties(可选)。
相关文档地址:https://activemq.apache.org/security。
本文采用的是简单验证插件方式(Simple Authentication Plugin)。即:

  • 在【activemq.xml】添加账户信息(在<broker>标签内<shutdownHooks>标签后):
<plugins>
    <simpleAuthenticationPlugin>
        <users>
          <authenticationUser username="admin1" password="***" groups="admins,users"/>
          <authenticationUser username="user1" password="***" groups="users"/>
          <authenticationUser username="guest1" password="***" groups="guests"/>
        </users>
    </simpleAuthenticationPlugin>
</plugins>
  • 其中groups定义的内容在【groups.properties】进行定义:
admins=admin1,admin2,...
users=user1,user2,...
guests=guest1,guest2,...
  • 如果在activemq.xml中的用户名和密码采用占位符,例如:
<authenticationUser username="${user1.username}" password="${user1.password}" groups="users"/>

则对应的用户名和密码在【credentials.properties】中集中设置,例如:

user1.username=user1
user1.password=***
admin1.username=admin1
admin1.password=***

注意:到这里,ActiveMQ服务启动后,MQTT服务也将启动,其服务端口默认为1883
使用相关客户端工具(例如:MQTTBox)即可使用对应账户进行连接测试。

(3.2)网页管理平台的账户管理

如大多数博文所说,ActiveMQ网页管理平台基于jetty(从【activemq.xml】中包含jetty.xml也可以获知),其身份验证信息将从【jetty.xml】和【jetty-realm.properties】中获取。

  • 在【jetty.xml】打开身份验证(默认是打开的、检查一下而已),如下:
<bean id="securityConstraint" class="org.eclipse.jetty.util.security.Constraint">
	<property name="name" value="BASIC" />
	<property name="roles" value="user,admin" />
	<!-- set authenticate=false to disable login -->
	<property name="authenticate" value="true" />
</bean>
<bean id="adminSecurityConstraint" class="org.eclipse.jetty.util.security.Constraint">
	<property name="name" value="BASIC" />
	<property name="roles" value="admin" />
	 <!-- set authenticate=false to disable login -->
	<property name="authenticate" value="true" />
</bean>
  • 在【jetty-realm.properties】设置账号信息,如下:
# username: password [,rolename ...]
admin1: ***, admin
admin2: ***, admin
user1: ***, user
user2: ***, user

ActiveMQ服务启动后,jetty服务也相应启动。对应端口为8161

(4)结语

自此,ActiveMQ服务的两部分账号管理设置结束。
再次强调,网页管理平台是便利化工具,方便用户使用UI查看主题(Topics)的运行情况,并非必须配置,
其服务端口8161无需对外开放。
管理员只需开放相关服务端口即可,例如:MQTT默认1883,AMQP默认为5672。

基于ActiveMQ搭建MQTT服务备忘(二):webapp集成

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值