学习笔记 | 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 文件中添加以下代理订阅规则:


module.subscription.1.topic = client/%c    
module.subscription.1.qos = 1

module.subscription.2.topic = user/%u    
module.subscription.2.qos = 2

module.subscription.3.topic = testtopic/#
module.subscription.3.qos = 2

2-7 保留消息(重点)

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

修改保留消息的时间

vi etc/plugins/emqx_retainer.conf。

修改retainer.expiry_interval

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

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

关闭匿名认证:


etc/emqx.conf

## Value: true | false
allow_anonymous = true ##改成false
emqx restart ##重启emqx

认证请求路径配置:


# etc/plugins/emqx_auth_http.conf

## 请求地址
auth.http.auth_req = http://192.168.200.0:8991/mqtt/auth

## HTTP 请求方法
## Value: post | get | put
auth.http.auth_req.method = post

## 请求参数
auth.http.auth_req.params = clientid=%c,username=%u,password=%P

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

开启acl

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


etc/emqx.conf  

## ACL 未匹配时默认授权
## Value: allow | deny
acl_nomatch = allow  ##改成deny

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


# etc/plugins/emqx_auth_http.conf
####使用vi编辑该配置,修改URL请求地址

##--------------------------------------------------------------------
## Superuser request.
##
## Variables:
##  - %u: username
##  - %c: clientid
##  - %a: ipaddress
##  - %r: protocol
##  - %P: password
##  - %p: sockport of server accepted
##  - %C: common name of client TLS cert
##  - %d: subject of client TLS cert
##
## Value: URL 请求地址
auth.http.super_req = http://192.168.200.1:8991/mqtt/superuser
## Value: post | get | put 请求方法
auth.http.super_req.method = post
## Value: Params 请求参数
auth.http.super_req.params = clientid=%c,username=%u

配置ACL请求


# etc/plugins/emqx_auth_http.conf
####使用vi编辑该配置,修改URL请求地址以及请求方式

##--------------------------------------------------------------------
## ACL request.
##
## Variables:
##  - %A: 1 | 2, 1 = sub, 2 = pub
##  - %u: username
##  - %c: clientid
##  - %a: ipaddress
##  - %r: protocol
##  - %m: mountpoint
##  - %t: topic
##
## Value: URL
auth.http.acl_req = http://192.168.200.1:8991/mqtt/acl
## Value: post | get | put
auth.http.acl_req.method = post
## Value: Params
auth.http.acl_req.params = access=%A,username=%u,clientid=%c,ipaddr=%a,topic=%t,mountpoint=%m
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_65861329/article/details/129339573

智能推荐

libhv网络库源码剖析-程序员宅基地

文章浏览阅读1.1w次,点赞32次,收藏75次。此文归纳整理和libhv源码分析相关的文章,献给感兴趣钻研libhv源码的同学。如有其他同学有写过不错的libhv源码分析文章,可以联系我加上。文章目录: 事件循环和IO多路复用机制介绍、事件的定义以及数据结构介绍、事件的优先级机制、IO事件、定时器事件、空闲事件、自定义事件、心跳和保活机制、TCP如何处理粘包与分包、回显、聊天、代理三种经典服务实现详解、多线程/多进程服务端编程、网络编程十宗罪、致谢_libhv

汇编程序:红红绿绿的字符_汇编程序红色的是什么-程序员宅基地

文章浏览阅读1.8k次。任务:编程序,在屏幕的中间分别显示绿色、绿底红色、白底蓝色的字符串 ‘YantaiUniversity’ 提示:要计算出“屏幕的中间”对应的内存单元,然后将字符以及对应的属性字节写入到内存中。参考解答:assume cs:codeseg, ds:datasgdatasg segment db 'welcome to masm!'datasg endscodeseg segments_汇编程序红色的是什么

w3af SyntaxError: multiple exception types must be parenthesized-程序员宅基地

文章浏览阅读2.5k次。修改yum配置文件:vim /root/w3af/extras/docker/scripts/./w3af_console_dock。原因:yum需要用python2编译,如果服务器安装的是python3.6并作为默认编译器的话,就会出现这个错误。_syntaxerror: multiple exception types must be parenthesized

foc配置篇——ADC注入组使用定时器触发采样的配置_hal_adcex_injectedstart-程序员宅基地

文章浏览阅读1.4w次,点赞59次,收藏333次。针对三电阻低测采样来讲一讲如何配置使用定时器来触发ADC的注入组进行采样_hal_adcex_injectedstart

Linux命令行终端提示符多种实用技巧_linux终端@是是什么意思-程序员宅基地

文章浏览阅读1.6k次。转载地址:https://blog.csdn.net/qq_36357820/article/details/789606251.Linux命令行提示符简介  众所周知,Linux命令行是系统管理员管理Linux的重要手段,我们管理Linux,首先要面对的就是Linux命令行提示符。  Linux命令行结尾的提示符有“#”和“$”两种不同的符号,如下所示:  [root@oldbo..._linux终端@是是什么意思

AStyle 格式参数中文手册_astytle參數-程序员宅基地

文章浏览阅读4.8k次。http://blog.chinaunix.net/uid-20662363-id-1904145.htmlhttps://winddoing.github.io/post/62371.html推荐命令:style=linuxindent-switchesindent-namespacesindent-preproc-blockpad-oper--ali..._astytle參數

随便推点

iphone连接windows10移动热点问题_iphone连win10热点-程序员宅基地

文章浏览阅读146次。以前公司的wifi虽然做了802.1x无线接入认证,不过限制不严,采用的是账号认证,所以手机等无线设备也是可以接入的,后来采用计算机认证,只有加域的电脑才能接入,这下手机不能直接接入了,所幸电脑虽然没有管理员权限,还是可以开启移动热点,这样手机可以通过电脑接入网络,虽然跟电脑一样受上网行为约束,但是像邮件,微信,oa等还是可以使用的,总是省了下数据流量。有类似困扰的朋友,可以参考借鉴下,注意移动热点选2.4GHz,手机wifi不要限制IP地址跟踪,可能就能解决你无线设备接入win10的移动热点了。_iphone连win10热点

ubuntu12.10安装jdk1.7-程序员宅基地

文章浏览阅读866次。考完试了,要把自己答应的补回来,今天就写java jdk的安装吧因为本人命令不熟悉,而且vi也不熟,就是菜鸟一个。所以,本文安装尽量避免命令及vi的使用。首先下载官网上最新的jdk,网址:http://www.Oracle.com/technetwork/java/javase/downloads/jdk-7u4-downloads-1591156.html。解压到桌面,放置到deve

nexus上传jar包_nexus手动传jar-程序员宅基地

文章浏览阅读1.6k次。nexus上传自定义starter_nexus手动传jar

M1芯片Mac安装brew和brew常用命令(附:安装docker)_brew 启动docker-程序员宅基地

文章浏览阅读2.5k次。改完之后在安装上面那个安装命令就可以啦。1、卸载docker:哪种方式安装的就用哪种方式卸载 |brew uninstall docker |brew cask uninstall docker。1、安装docker:brew cask install docker |这样安装的docker将会安装在usr/local/bin目录下。1、安装docker:brew install docker |这样的安装docker将会在usr/local/Cellar目录下。_brew 启动docker

图标插件FusionChartsFree-程序员宅基地

文章浏览阅读97次。二.介绍ØFusionCharts是InfoSoftGlobal公司的一个产品,InfoSoftGlobal公司是专业的Flash图形方案提供商,他们还有几款其他的,基于Flash技术的产品,都非常的漂亮。ØFusionChartsFree则是FusionCharts提供的一个免费版本,虽然免费,功能依然强大,图形类型依然丰富。ØFusionChartsfr..._fusionchartsfree

Appium 微信小程序自动化,切换Webview后,定位元素失败解决方法_微信ui自动化定位了一个页面,定位第二个页面就报错了-程序员宅基地

文章浏览阅读2k次。代码是用python写的,切换上下文后,通过 chrome://inspect/#devices,获取页面的元素,通过xpath定位,但是appium一直报找不到元素的错误找了很多资料,结果发现上下文是一直变化的,所以不可以写死值,切换到正确的上下文后,便利handle,就可以了contexts = driver.contextsprint(driver.contexts)driver.s..._微信ui自动化定位了一个页面,定位第二个页面就报错了

推荐文章

热门文章

相关标签