Windows下搭建MQTT服务器(Apollo)
- MQTT
- 2020-07-28
- 18热度
- 0评论
1、安装JDK,配置Java环境(省略)
2、下载 Apache 的 Apollo,可直接下载:apache-apollo-1.7.1-windows-distro(服务端).zip(MQTT服务软件挺多的,比如:EMQ、Mosquitto)

MQTT服务软件列表,下图来源:https://github.com/mqtt/mqtt.github.io/wiki/server-support

3、解压 Apollo,cmd 进入 apache-apollo-1.7.1\bin 目录
4、创建实例,命令如下:
apollo.cmd create mybroker
执行后会自动创建 mybroker 目录(可自定义名称),其中 etc\apollo.xml 文件下是配置服务器信息的文件,etc\users.properties 文件包含连接MQTT服务器时用到的用户名和密码,初始默认帐号是 admin,密码是 password。可以修改原始的admin=password,可以接着换行添加新的用户名密码。

5、进入 mybroker\bin\ 目录,运行实例,命令如下:
apollo-broker.cmd run

6、搭建完成,进行测试。
MQTT服务器TCP连接端口:tcp://0.0.0.0:61613
登录服务器后,如果MQTT服务器有客户端连接,后台会显示如下:

测试工具:
1、通信猫调试工具,点击下载:通信猫调试工具_v308
2、MQTT测试工具,点击下载:MQTT测试工具
权限配置:
1、创建用户
编辑 mybroker/etc/users.properties 添加 user1 和 user2 :
admin=password
user1=123456
user2=654321
等号的左边是账户,右边是密码。所以我们也能在这里改admin的密码。
2、创建用户组
创建完用用户,我们还需要编辑 mybroker/etc/groups.properties 给用户指定用户组:
admins=admin
groupsend=user1
grouprecv=user2
# 还可以用下面的方式将多个用户指定到一个用户组
# groupdemo = user1|user2
3、设置用户组权限
最后我们就能在 mybroker/etc/apollo.xml 设置用户组权限了:
<access_rule allow="admins" action="*"/>
<access_rule allow="*" action="connect" kind="connector"/>
<access_rule allow="groupsend" action="connect create send"/>
<access_rule allow="grouprecv" action="connect receive"/>
可以给一个用户组设置多个权限,多个权限之间用空格分割。
从官方文档可以看到权限有下面的类别:
admin : use of the administrative web interface
monitor : read only use of the administrative web interface
config : use of the administrative web interface to access and change the broker configuration.
connect : allows connections to the connector or virtual host
create : allows creation
destroy : allows destruction
send : allows the user to send to the destination
receive : allows the user to send to do non-destructive reads from the destination
consume : allows the user to do destructive reads against a destination
* : All actions
配置好之后我们的user1就只能发送消息,user2就只能接收消息了。
主题名和主题通配符:
发布的消息都有一个主题名,例如"topic/test"。客户端向服务端订阅感兴趣的主题,当有某主题的消息被发布的时候,服务端就会将消息分发给订阅了该主题的客户端。
主题名可以用分割符"/"如果存在的话就会将主题分割为多个主题层级。有了主题层级的概念之后我们就可以用主题通配符去过滤不同的主题。
多层通配符:
数字标志("#")是用于匹配主题中任意层级的通配符。多层通配符表示它的父级和任意数量的子层级。多层通配符必须位于它自己的层级或者跟在主题层级分隔符后面。不管哪种情况,它都必须是主题过滤器的最后一个字符。
例如:如果客户端订阅主题 "sport/tennis/player1/#",它会收到使用下列主题名发布的消息:
1、"sport/tennis/player1"
2、"sport/tennis/player1/ranking"
3、"sport/tennis/player1/score/wimbledon"
4、"sport/#"也匹配单独的 "sport" ,因为 # 包括它的父级。
5、"#"也是有效的,会收到所有的应用消息。
多层通配符用法举例:
1、"sport/tennis/#" 也是有效的。
2、"sport/tennis#" 是无效的。
3、"sport/tennis/#/ranking" 是无效的。
单层通配符:
加号 ("+") 是只能用于单个主题层级匹配的通配符。在主题过滤器的任意层级都可以使用单层通配符,包括第一个和最后一个层级。然而它必须占据过滤器的整个层级。可以在主题过滤器中的多个层级中使用它,也可以和多层通配符一起使用。
例如:"sport/tennis/+" 匹配 "sport/tennis/player1" 和 "sport/tennis/player2",但是不匹配 "sport/tennis/player1/ranking" 。同时,由于单层通配符只能匹配一个层级, "sport/+" 不匹配 "sport" 但是却匹配 "sport/"。
单层通配符用法举例:
1、"+" 是有效的。
2、"+/tennis/#" 是有效的。
3、"sport+" 是无效的。
4、"sport/+/player1" 也是有效的。
5、"/finance" 匹配 "+/+" 和 "/+" ,但是不匹配 "+"。
开始通配符:
美元符号("$") 用于匹配起始主题,如"$SYS/" 被广泛用作包含服务器特定信息或控制接口的主题的前缀。
开始通配符用法举例:
1、订阅 "#" 的客户端不会收到任何发布到以 "$" 开头主题的消息。
2、订阅 "+/monitor/Clients" 的客户端不会收到任何发布到 "$SYS/monitor/Clients" 的消息。
3、订阅 "$SYS/#" 的客户端会收到发布到以 “$SYS/” 开头主题的消息。
4、订阅 "$SYS/monitor/+" 的客户端会收到发布到 "$SYS/monitor/Clients" 主题的消息。
5、如果客户端想同时接受以 "$SYS/" 开头主题的消息和不以 "$" 开头主题的消息,它需要同时订阅 "#" 和 "$SYS/#"。
其他相关文章:Python实现MQTT客户端
其他相关文章:Windows下搭建MQTT服务器(EMQ)




鲁ICP备19063141号
鲁公网安备 37010302000824号