最近比较忙,有些关于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的信息了。

我这里用的协议版本是MQTT的V3.1.1, 所以呢,将里面的重点内容摘抄出来,方便查看。一个结论,connack不是0的时候,就要注意是不是有什么问题了

MQTT研究之EMQ:【EMQX使用中的一些问题记录(4)】的更多相关文章

  1. MQTT研究之EMQ:【CoAP协议应用开发】

    本博文的重点是尝试CoAP协议的应用开发,其中包含CoAP协议中一个重要的开源工具libcoap的安装和遇到的问题调研.当然,为了很好的将EMQ的CoAP协议网关用起来,也调研了下EMQ体系下,CoA ...

  2. MQTT研究之EMQ:【EMQ之HTTP认证/访问控制】

    今天进行验证的逻辑是EMQ的http的Auth以及ACL的逻辑. 首先,参照HTTP插件认证配置的说明文档进行基本的配置, 我的配置内容如下: ##-------------------------- ...

  3. MQTT研究之EMQ:【JAVA代码构建X509证书【续集】】

    openssl创建私钥,获取公钥,创建证书都是比较简单的,就几个指令,很快就可以搞定,之所以说简单,是因为证书里面的基本参数配置不需要我们组装,只需要将命令行里面需要的几个参数配置进去即可.但是呢,用 ...

  4. MQTT研究之EMQ:【SSL证书链验证】

    1. 创建证书链(shell脚本) 客户端证书链关系: rootCA-->chainca1-->chainca2-->chainca3 ca caCert1 caCert2 caCe ...

  5. MQTT研究之EMQ:【EMQX使用中的一些问题记录(1)】

    issue 1. EMQX的共享订阅 EMQX是一个非常强大的物联网通信消息总线,基于EMQX开展应用开发,要注意很多配置细节问题,这里要说到的就是共享订阅以及和cleanSession之间的关系问题 ...

  6. MQTT研究之EMQ:【EMQX使用中的一些问题记录(2)】

    我的测试环境: Linux: CentOS7 EMQX:V3.2.3 题外话: 这里主要介绍Websocket的支持问题. 对ws的支持比较正常,但是对wss的支持,调了较长的时间,没有成功. Jav ...

  7. MQTT研究之EMQ:【EMQX使用中的一些问题记录(3)】

    EMQX功能强大,但是帮助信息或者可用资料的确有限,遇到个问题,比较难找到处理的头绪,今天,我要记录的是,使用中出现EMQX宕机,但是呢,启动也启动不了. 今天记录的内容,就以操作EMQX 3.2.3 ...

  8. MQTT研究之EMQ:【JAVA代码构建X509证书】

    这篇帖子,不会过多解释X509证书的基础理论知识,也不会介绍太多SSL/TLS的基本信息,重点介绍如何用java实现SSL协议需要的X509规范的证书. 之前的博文,介绍过用openssl创建证书,并 ...

  9. MQTT研究之EMQ:【基础研究】

    EMQ版本V2, emqttd-centos7-v2.3.11-1.el7.centos.x86_64.rpm 下载地址:http://emqtt.com/downloads/2318/centos7 ...

随机推荐

  1. 解决使用Microsoft Graph OAuth获取令牌时,没有refresh_token的问题

    今天在使用Microsoft Graph 的时候,发现按照官方文档,无论如何都不能获取refresh_token,其他都没问题,经过查询,发现是因为在第一步,获取code授权时,没有给离线权限(off ...

  2. (一)MongoDB安装

    (一)MongoDB安装 mongodb 2018年03月06日 15时53分29秒 安装准备 启动mongodb 1.命令行参数启动 2.从配置文件启动 使用服务启动mongodb 参数解释 用户授 ...

  3. JAVA构造器,重载与重写

    1. java构造器 构造器也叫构造方法(constructor), 用于对象初始化. 构造器是一个创建对象时被自动创建的特殊方法,目的是对象的初始化. 构造器 的名称与类的名称一致. JAVA通过n ...

  4. webpack4.0报WARNING in configuration警告

    在进行webpack打包工作时,先进行如下步骤 1). 安装webpack:推荐全局命令  cnpm install webpack -g 查看webpack版本 webpack -v 2) . 此时 ...

  5. P2220 [HAOI2012]容易题[小学数学]

    题目描述 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值,我们定 ...

  6. react 沉思录

    react = Virtual DOM + component + data flow + jsx 核心是Virtual DOM结构的状态维护.渲染机制及UI系统的DOM组织功能: 基于Virtual ...

  7. hdu1540-Tunnel Warfare-(线段树+二分)

    题意:有n个村庄排成一列,相邻的村庄可以通信,炸毁则不可以通信,进行m个操作.3种操作,1.炸毁某村庄:2.修复上一个被炸毁的村庄:3.查询某个村庄能通信的村庄数(自己算一个). 解题:求某个点左边扩 ...

  8. PostgreSQL 执行计划

    简介 PostgreSQL是“世界上最先进的开源关系型数据库”.因为出现较晚,所以客户人群基数较MySQL少,但是发展势头很猛,最大优势是完全开源. MySQL是“世界上最流行的开源关系型数据库”.当 ...

  9. RPM包——查询

    1.rpm -q (1)    查询是否已经安装某一个rpm包: 例如:rpm -q httpd (2)-qa:查询所有的已经安装的包: 2.查询软件包的详细信息: rpm -qi -i :查询软件包 ...

  10. [RN] React Native ScrollView自动滑动到顶部

    react-native 自动滚到屏幕顶部,模仿微信朋友圈评论自动定位 <ScrollView showsVerticalScrollIndicator={false} style={[styl ...