EMQ服务器学习1 mqtt的基础理论知识
最近有时间,研究了一下mqtt消息推送的技术,这个技术在我们的项目中也用到了,但是对于其原理不是很理解,花时间学习了一下。EMQ官方地址:https://www.emqx.io1.mqtt服务器的安装服务器下载地址:https://github.com/emqx/emqx/releases或者emqx.io注意:mq服务器有企业版和broker版本,选择broker版本进行下载。...
最近有时间,研究了一下mqtt消息推送的技术,这个技术在我们的项目中也用到了,但是对于其原理不是很理解,花时间学习了一下。
EMQ官方地址:https://www.emqx.io
1.mqtt服务器的安装
服务器下载地址:https://github.com/emqx/emqx/releases或者emqx.io
注意:mq服务器有企业版和broker版本,选择broker版本进行下载。
我下载的事Windows版本的服务器。下载完成之后将zip文件进行解压
在bin目录下:打开cmd窗口 执行命令 emqx start 启动服务
2.功能简介
mqtt是为移动互联网,互联网设计的轻量级发布订阅模式消息服务器
mqtt服务器启动之后,任何设备终端都可以以通过mqtt协议连接到服务器。通过发布订阅进行消息的交换。
mqtt提供了很多客户端:https://github.com/mqtt/mqtt.github.io/wiki/libraries
此次学习我采用的Java客户端和mqtt的dashboard界面工具结合进行消息推送接受的测试。
2.1认证,访问控制
- 连接认证: EMQ X 校验每个连接上的客户端是否具有接入系统的权限,若没有则会断开该连接
- 访问控制: EMQ X 校验客户端每个 发布(Publish)/订阅(Subscribe) 的权限,以 允许/拒绝 相应操作
2.1.1
认证:
EMQ X 消息服务器认证由一系列认证插件(Plugins)提供,系统支持按用户名密码、ClientID 或匿名认证。
系统默认开启匿名认证(Anonymous),通过加载认证插件可开启的多个认证模块组成认证链:
2.1.2
访问控制:
EMQ X 消息服务器通过 ACL(Access Control List) 实现 MQTT 客户端访问控制。
ACL 访问控制规则定义:
允许(Allow)|拒绝(Deny) 谁(Who) 订阅(Subscribe)|发布(Publish) 主题列表(Topics)
MQTT 客户端发起订阅/发布请求时,EMQ X 消息服务器的访问控制模块会逐条匹配 ACL 规则,直到匹配成功为止
具体的配置参阅官方文档:https://docs.emqx.io/broker/v3/cn/guide.html
2.2共享订阅
支持多种消息派发策略
共享订阅支持两种使用方式:
订阅前缀 | 使用示例 |
$queue/ | mosquitto_sub -t ‘$queue/topic’ |
$share/<group>/ | mosquitto_sub -t ‘$share/group/topic’ |
目前支持的策略
策略 | 说明 |
---|---|
random | 在所有共享订阅者中随机 |
round_robin | 按订阅顺序 |
sticky | 使用上次派发的订阅者 |
hash | 根据发送者的 ClientId |
桥接 的概念是 EMQ X 支持将自身某类主题的消息通过某种方式转发到另一个 MQTT Broker。
桥接 与 集群 的不同在于:桥接不会复制主题树与路由表,只根据桥接规则转发 MQTT 消息。
目前 EMQ X 支持的桥接方式有:
- RPC 桥接:RPC 桥接只能在 EMQ X Broker 间使用,且不支持订阅远程节点的主题去同步数据
- MQTT 桥接:MQTT 桥接同时支持转发和通过订阅主题来实现数据同步两种方式
其概念如下图所示
此外 EMQ X 消息服务器支持多节点桥接模式互联:
具体配置参考文档
2.3 htpp发布接口
EMqX消息服务器提供了一个HTTP发布接口,应用服务器可以通过该发布接口发布mqtt消息:
HTTP POST http://host:8080/api/v3/mqtt/publish
HTTP 接口参数:
参数 | 说明 |
---|---|
client_id | MQTT 客户端 ID |
qos | QoS: 0 | 1 | 2 |
retain | Retain: true | false |
topic | 主题(Topic) |
payload | 消息载荷 |
注解
HTTP 发布接口采用 Basic 认证。上例中的 user
和 password
是来自于 Dashboard 下的 Applications 内的 AppId 和密码
2.4MQTT WebSocket 连接
Web 浏览器可直接通过 WebSocket 连接至服务器:
WebSocket URI: | ws(s)://host:8083/mqtt |
Sec-WebSocket-Protocol: | ‘mqttv3.1’ or ‘mqttv3.1.1’ |
Dashboard 插件提供了一个 MQTT WebSocket 连接的测试页面:
http://127.0.0.1:18083/#/websocket
我后面的最开始和客户端的测试也是通过websocket进行消息的推送和接受的 测试。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)