当前位置:   article > 正文

学习笔记 | EMQX

emqx

一、MQTT协议

1-1 简介

MQTT协议是一种基于发布/订阅模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上。

实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publisher)、代理(Broker)(服务器)、订阅者(Subscriber)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。

MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:

(1)Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload);

(2)payload,可以理解为消息的内容,是指订阅者具体要使用的内容。

1-2 Qos服务质量等级

MQTT协议中设计了个Qos服务等级

Qos0 : 消息最多传递1次,如果当时客户端不可用,则会丢失该消息。

Qos1 : 消息至少传递1次

Qos2 : 消息仅传送一次

1-3 发布与订阅QoS

木桶效应,去最小的那面板

1-4 Topic通配符

层级分隔符:/

/ 用来分割主题树的每一层,并给主题空间提供分等级的结构。当两个通配符在一个主题中出现的时候,主题层次分隔符的使用是很重要的。

多层通配符:#

多层通配符有可以表示大于等于0的层次。因此,love/#也可匹配到单独的love,此时#代表0层。

单层通配符:+

只匹配主题的一层。

注意事项

1.主题层次分隔符被用来在主题中引入层次。多层的通配符和单层通配符可以被使用,但他们不能被使用来做发布者的消息。

2.Topic命名尽量见名知意,符合规范,主题名字是大小写敏感的。比如说,love和LOVE是两个不同的主题。

3.以/开头会产生一个不同的主题。比如说,/love与love不同。/love匹配"+/+"和/+,但不匹配+

4.不要在任何主题中包含null(Unicode \x0000)字符。

5.在主题树中,长度被限制于64k内但是在这以内没有限制层级的数目 。

6.可以有任意数目的根节点;也就是说,可以有任意数目的主题树。

二、EMQX

2-1 EMQX简介

emqx其实就是mqtt协议中的broker (代理服务器)

2-2 环境搭建与配置

##拉取镜像

docker pull emqx/emqx:v4.1.0

##运行镜像

docker run -tid --name emqx -p 1883:1883 -p 8083:8083 -p 8081:8081 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:v4.1.0

2-3 Dashboard

EMQ X 提供了 Dashboard 以方便用户管理设备与监控相关指标。通过 Dashboard可以查看服务器基本信息、负载情况和统计数据,可以查看某个客户端的连接状态等信息甚至断开其连接,也可以动态加载和卸载指定插件。除此之外,EMQ X Dashboard 还提供了规则引擎的可视化操作界面,同时集成了一个简易的 MQTT 客户端工具供用户测试使用。

当 EMQ X 成功运行在你的本地计算机上且 EMQ X Dashboard 被默认启用时,通过访问

http://localhost:18083 来查看Dashboard,默认用户名是 admin,密码是 public。

2-4 MQTTX

MQTT X 是 EMQ 开源的一款优雅的跨平台 MQTT 5.0 桌面客户端,它支持 macOS, Linux, Windows。

MQTT X 的 UI 采用了聊天界面形式,简化了页面操作逻辑,用户可以快速创建连接,允许保存多个客户端,方便用户快速测试 MQTT/MQTTS 连接,及 MQTT 消息的订阅和发布。

2-5 延迟发布(重点)

发布topic的格式

$delayed/{DelayInterval}/{TopicName}

需要开启delay模块(在Dashboard

2-4 共享订阅(重点)

类似于做负载均衡

共享订阅有俩种模式

$queue 队列 将消息按负载均衡规则发到服务

$share/g1 指定分组 ,按负载均衡规则发到每个分组下的一个服务

指定负载均衡

2-6 代理订阅 (重点)

代理订阅可以理解成帮客户端自动订阅一个主题。

需要进行配置:

仅仅开启并不意味代理订阅已经工作,你还需要配置相应的规则,EMQ X 的代理订阅规则支持用户自行配置,用户可以自行添加多条代理订阅规则,每条代理订阅规则都需要指定 Topic 和 QoS,规则的数量没有限制,在 etc/emqx.conf 文件中添代理订阅规则的格式如下:

vi etc/emqx.conf module.subscription.<number>.topic = <topic>module.subscription.<number>.qos = <qos>

在配置代理订阅的主题时,EMQ X 提供了 %c 和 %u 两个占位符供用户使用,EMQ X 会在执行代理订阅时将配置中的 %c 和 %u 分别替换为客户端的 Client ID 和 Username,需要注意的是,%c 和 %u 必须占用一整个主题层级。

例如,在 etc/emqx.conf 文件中添加以下代理订阅规则:

  1. module.subscription.1.topic = client/%c
  2. module.subscription.1.qos = 1
  3. module.subscription.2.topic = user/%u
  4. module.subscription.2.qos = 2
  5. module.subscription.3.topic = testtopic/#
  6. module.subscription.3.qos = 2

2-7 保留消息(重点)

需要使用到插件,插件默认开启

修改保留消息的时间

vi etc/plugins/emqx_retainer.conf。

修改retainer.expiry_interval

2-8 HTTP认证(作用于连接代理服务器)(重点)

最常用的是Http认证,理解成连接到emqx代理服务器时需要进行权限认证

关闭匿名认证:

  1. etc/emqx.conf
  2. ## Value: true | false
  3. allow_anonymous = true ##改成false
  4. emqx restart ##重启emqx

认证请求路径配置:

  1. # etc/plugins/emqx_auth_http.conf
  2. ## 请求地址
  3. auth.http.auth_req = http://192.168.200.0:8991/mqtt/auth
  4. ## HTTP 请求方法
  5. ## Value: post | get | put
  6. auth.http.auth_req.method = post
  7. ## 请求参数
  8. auth.http.auth_req.params = clientid=%c,username=%u,password=%P

2-9 ACL (发布订阅权限校验)

开启acl

更改配置(默认规则会放行)

  1. etc/emqx.conf
  2. ## ACL 未匹配时默认授权
  3. ## Value: allow | deny
  4. acl_nomatch = allow ##改成deny

配置超级管理校验规则使用Http

  1. # etc/plugins/emqx_auth_http.conf
  2. ####使用vi编辑该配置,修改URL请求地址
  3. ##--------------------------------------------------------------------
  4. ## Superuser request.
  5. ##
  6. ## Variables:
  7. ## - %u: username
  8. ## - %c: clientid
  9. ## - %a: ipaddress
  10. ## - %r: protocol
  11. ## - %P: password
  12. ## - %p: sockport of server accepted
  13. ## - %C: common name of client TLS cert
  14. ## - %d: subject of client TLS cert
  15. ##
  16. ## Value: URL 请求地址
  17. auth.http.super_req = http://192.168.200.1:8991/mqtt/superuser
  18. ## Value: post | get | put 请求方法
  19. auth.http.super_req.method = post
  20. ## Value: Params 请求参数
  21. auth.http.super_req.params = clientid=%c,username=%u

配置ACL请求

  1. # etc/plugins/emqx_auth_http.conf
  2. ####使用vi编辑该配置,修改URL请求地址以及请求方式
  3. ##--------------------------------------------------------------------
  4. ## ACL request.
  5. ##
  6. ## Variables:
  7. ## - %A: 1 | 2, 1 = sub, 2 = pub
  8. ## - %u: username
  9. ## - %c: clientid
  10. ## - %a: ipaddress
  11. ## - %r: protocol
  12. ## - %m: mountpoint
  13. ## - %t: topic
  14. ##
  15. ## Value: URL
  16. auth.http.acl_req = http://192.168.200.1:8991/mqtt/acl
  17. ## Value: post | get | put
  18. auth.http.acl_req.method = post
  19. ## Value: Params
  20. auth.http.acl_req.params = access=%A,username=%u,clientid=%c,ipaddr=%a,topic=%t,mountpoint=%m
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/188687
推荐阅读
相关标签
  

闽ICP备14008679号