MQTT研究之EMQ:【EMQX使用中的一些问题记录(4)】
最近比较忙,有些关于EMQ的使用问题,没有时间记录了,趁这个周末抽点时间,将最近遇到的,觉得比较有价值的一个问题,分享给大家吧。
这里是针对前面的一篇博客,做的一个深入研究,关于订阅系统总线判断设备上线还是下线的补充研究。基于报文内容进行分析连接的细分信息,有一定的帮助。
1. 正常的连接
应用服务能够订阅到来自$SYS/brokers/+/clients/+/connected主题的数据。如下:这里能看到设备连接到那个EMQX节点,且知道设备端的配置信息,例如用户名,是否cleansession,clientId等等。这里有一个能反应出设备正常连接的状态字段connack,值为0表示正常连接上了。
Qos : , Topic :$SYS/brokers/emqx@10.95.200.17/clients/res10/connected, ClientId: emqXmonitor
Sub : {"clean_start":true,"clientid":"res10","connack":,"ipaddress":"10.95.177.137","keepalive":,"proto_name":"MQTT","proto_ver":,"ts":,"username":"water"}
当连接断开时(前提是连接正常的连接进来了,即$SYS/brokers/+/clients/+/connected的主题上进来的数据,对应connack的值为0),订阅了$SYS/brokers/+/clients/+/disconnected主题的应用服务,会收到报文如下。这里会发现,报文内容显示了clientId,username以及断开的原因和具体时间点。这里重点要说的是reason字段。下面这个报文显示断开的原因是normal,即正常断开,我这里是基于MQTT.fx模拟的客户端,点击了disconnect按钮实现的。
Qos : , Topic :$SYS/brokers/emqx@10.95.200.17/clients/res10/disconnected, ClientId: emqXmonitor
Sub : {"clientid":"res10","username":"water","reason":"normal","ts":}
Qos : , Topic :$SYS/brokers/emqx@10.95.200.17/clients/res10/connected, ClientId: emqXmonitor
Sub : {"clean_start":true,"clientid":"res10","connack":,"ipaddress":"10.95.177.137","keepalive":,"proto_name":"MQTT","proto_ver":,"ts":,"username":"shihuc"}
下面这个断开,就和上面那个disconnected的报文有点不同,主要是reason的内容不同,这里是closed,标识关闭。说明下,我这里是通过点击MQTT.fx软件右上角的红色X实现的。
Qos : , Topic :$SYS/brokers/emqx@10.95.200.17/clients/res10/disconnected, ClientId: emqXmonitor
Sub : {"clientid":"res10","username":"shihuc","reason":"closed","ts":}
2. 不正常的连接
注意啦,注意啦,这里是connected主题上的报文,显示连接上来了,但是呢,看看connack字段的内容,不是0哟,说明这次连接不是正常的。现象也的确是没有连接上来,因为我的mysql mqtt_user表里面没有abc这个用户,MQTT.fx显示的连接失败的原因是未授权用户。
Qos : , Topic :$SYS/brokers/emqx@10.95.200.17/clients/res11/connected, ClientId: emqXmonitor
Sub : {"clean_start":true,"clientid":"res11","connack":,"ipaddress":"10.95.177.137","keepalive":,"proto_name":"MQTT","proto_ver":,"ts":,"username":"abc"}
下面这个connected消息,和上面的基本一样,下面这个是未授权用户(Not authorized to connect)对应的第二次connected报文。起初,按照我的理解,这里应该是disconnected报文,但是给MQTT官方的github上项目提的issue显示,只有正常连接上线的设备,才会给他下发disconnected消息。否则只有connected消息,通过connack的内容进行细化区分。为何这里会出现两次connected的消息呢?从paho的客户端是可以看得出信息的,首先会从默认的MQTT V4开始
Qos : , Topic :$SYS/brokers/emqx@10.95.200.17/clients/res11/connected, ClientId: emqXmonitor
Sub : {"clean_start":true,"clientid":"res11","connack":,"ipaddress":"10.95.177.137","keepalive":,"proto_name":"MQIsdp","proto_ver":,"ts":,"username":"abc"}
3. 连接的状态的协议说明
这里主要涉及的就是CONNACK这个消息了,参照协议,就不难理解上面报文中的connack的信息了。
http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718033
https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901075
我这里用的协议版本是MQTT的V3.1.1, 所以呢,将里面的重点内容摘抄出来,方便查看。一个结论,connack不是0的时候,就要注意是不是有什么问题了。

MQTT研究之EMQ:【EMQX使用中的一些问题记录(4)】的更多相关文章
- MQTT研究之EMQ:【CoAP协议应用开发】
本博文的重点是尝试CoAP协议的应用开发,其中包含CoAP协议中一个重要的开源工具libcoap的安装和遇到的问题调研.当然,为了很好的将EMQ的CoAP协议网关用起来,也调研了下EMQ体系下,CoA ...
- MQTT研究之EMQ:【EMQ之HTTP认证/访问控制】
今天进行验证的逻辑是EMQ的http的Auth以及ACL的逻辑. 首先,参照HTTP插件认证配置的说明文档进行基本的配置, 我的配置内容如下: ##-------------------------- ...
- MQTT研究之EMQ:【JAVA代码构建X509证书【续集】】
openssl创建私钥,获取公钥,创建证书都是比较简单的,就几个指令,很快就可以搞定,之所以说简单,是因为证书里面的基本参数配置不需要我们组装,只需要将命令行里面需要的几个参数配置进去即可.但是呢,用 ...
- MQTT研究之EMQ:【SSL证书链验证】
1. 创建证书链(shell脚本) 客户端证书链关系: rootCA-->chainca1-->chainca2-->chainca3 ca caCert1 caCert2 caCe ...
- MQTT研究之EMQ:【EMQX使用中的一些问题记录(1)】
issue 1. EMQX的共享订阅 EMQX是一个非常强大的物联网通信消息总线,基于EMQX开展应用开发,要注意很多配置细节问题,这里要说到的就是共享订阅以及和cleanSession之间的关系问题 ...
- MQTT研究之EMQ:【EMQX使用中的一些问题记录(2)】
我的测试环境: Linux: CentOS7 EMQX:V3.2.3 题外话: 这里主要介绍Websocket的支持问题. 对ws的支持比较正常,但是对wss的支持,调了较长的时间,没有成功. Jav ...
- MQTT研究之EMQ:【EMQX使用中的一些问题记录(3)】
EMQX功能强大,但是帮助信息或者可用资料的确有限,遇到个问题,比较难找到处理的头绪,今天,我要记录的是,使用中出现EMQX宕机,但是呢,启动也启动不了. 今天记录的内容,就以操作EMQX 3.2.3 ...
- MQTT研究之EMQ:【JAVA代码构建X509证书】
这篇帖子,不会过多解释X509证书的基础理论知识,也不会介绍太多SSL/TLS的基本信息,重点介绍如何用java实现SSL协议需要的X509规范的证书. 之前的博文,介绍过用openssl创建证书,并 ...
- MQTT研究之EMQ:【基础研究】
EMQ版本V2, emqttd-centos7-v2.3.11-1.el7.centos.x86_64.rpm 下载地址:http://emqtt.com/downloads/2318/centos7 ...
随机推荐
- Java开发环境之Gradle
查看更多Java开发环境配置,请点击<Java开发环境配置大全> 拾伍章:Gradle安装教程 1)下载Gradle安装包 官网下载:https://gradle.org/releases ...
- Mybatis框架进行批量导入和删除有三种方式
首先创建一个数据库 CREATE TABLE user ( id varchar(32) CHARACTER SET utf8 NOT NULL, name varchar(50) CHARA ...
- xz格式解压
1.安装xz命令 yum install xz -y 2.将xz文件解压为tar文件 xz -d example.tar.xz 3.将tar文件解压 tar xf example.tar 如果无法安装 ...
- 201671010446姚良实验十四团队项目评审&课程总结
实验十四 团队项目评审&课程学习总结 项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cn ...
- 项目Beta冲刺(3/7)(追光的人)(2019.5.25)
所属课程 软件工程1916 作业要求 Beta冲刺博客汇总 团队名称 追光的人 作业目标 描述Beta冲刺每日的scrum和PM报告两部分 队员学号 队员博客 221600219 小墨 https:/ ...
- iframe跨域修改子页面内容或样式
哈哈 当然不能啦 要是能修改百度logo早就是我的头像了
- dump array
<?php //array_dump.php $a=array(); $a[]=1; $a[]=2; $a[]=3; $a[]=4; $a[]='a'; $a[]='b'; $a[]='c'; ...
- 导入Excel——解析Excel——优化
package com.it.excel.excelLearn; import java.io.FileInputStream; import java.io.IOException; import ...
- sparkjob的提交流程
在使用spark-submit提交一个Spark应用之后,Driver程序会向集群申请一定的资源来启动东若干个Executors用来计算,当这些Executors启动后,它们会向Driver端的Sch ...
- Odds calculation required for the python strategy library
Bet Class class strats.Bet(inp)[source] Here is an example of the expected string input on instantia ...