mqtt服务器搭建以及mqtt客户端图形调试测试工具Paho安装使用

版权声明:本文为CSDN博主 无、涯 原创文章,可以转载但请注明出处。联系方式:[email protected] 博客地址 https://blog.csdn.net/a704397849 https://blog.csdn.net/a704397849/article/details/88533875

mqtt 相关术语

  • mqtt 是什么?

    • mqtt 是协议!即时通讯协议! 由IBM开发出来。MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议。是物联网的最主要的协议!
    • mqtt 英文: Message Queuing Telemetry Transport ,中文 : 消息队列遥测传输
    • 主要特点:
      • 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合
      • 对负载内容屏蔽的消息传输
      • 使用 TCP/IP 提供网络连接
      • 有三种消息发布服务质量:
        • “至多一次”:适用消息频繁发且丢失一两条不影响的场景,如:环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
        • “至少一次”:确保消息到达,但消息重复可能会发生
        • “只有一次”:确保消息到达一次。优点是确保消息送达且有且仅有一次,缺点是系统开销大.
      • 小型传输,开销很小
      • 使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制
  • mqtt broker 是什么?
    是基于MQTT协议的服务端实现。经常听到的mqtt服务器 就是指这家伙

  • mqtt client 是什么?
    是基于MQTT协议的客户端实现

  • 简单描述下 mqtt即mqtt通讯协议、mqtt服务器、mqtt客户端 以及我们自己使用了mqtt协议通讯的应用服务器,app,设备端 之间的关系
    在这里插入图片描述
    注意:我们的 使用mqtt协议通讯的 ‘’app应用’服务器’ ‘’ 也是一个MQTT 客户端! 在公司经常听到一些不了解mqtt的同事(包括测试人员)把我们自己的应用服务器认为为是MQTT服务器!

  • mqtt的 发布、订阅
    发布/订阅模式即Pub/Sub,是传统客户端/服务器模型(客户端直接连接服务器)的替代。传统的客户端/服务器模型是客户端直接连接到服务端(Endpoint),而发布/订阅模式实现了客户端的解耦。客户端(Publisher,消息发布者)发送特定的消息到另一个客户端(Subscriber,消息接收者)。这意味着发布者和订阅者都无需关心对方的存在与否。它们之间还有第三个组件,即消息经纪人(Broker),所有的发布者和接收者都要连接到消息经纪人,消息经纪人会过滤所有到来的消息,并根据需要分发这些消息。

    https://www.linuxidc.com/Linux/2016-10/136404.htm

    MQTT 发布者与订阅者之间通过”主题”(Topic) 进行消息路由,主题(Topic) 格式类似 Unix 文件路径,例如:
    sensor/1/temperature
    chat/room/subject
    presence/user/feng
    sensor/1/#
    sensor/+/temperature
    uber/drivers/joe/inbox
    MQTT 主题(Topic) 支持’+’, ‘#’的通配符,’+’通配一个层级,’#’通配多个层级(必须在末尾)。
    MQTT 消息发布者(Publisher) 只能向特定’名称主题’(不支持通配符)发布消息,订阅者(Subscriber)通过订阅’过滤主题’(支持通配符)来匹配消息。

    注解:初接触MQTT协议的用户,通常会向通配符的’过滤主题’发布广播消息,MQTT 协议不支持这种模式,需从订阅侧设计广播主题(Topic)。 例如 Android 推送,向所有广州用户,推送某类本地消息,客户端获得 GIS 位置后,可订阅 ‘news/city/guangzhou’ 主题。

    http://www.emqtt.com/docs/v2/getstarted.html#mqtt

mqtt broker选择安装

  • mqtt broker 有很多,如下:
    在这里插入图片描述

    上图来源:https://github.com/mqtt/mqtt.github.io/wiki/server-support

  • mqtt broker 各有其优缺点网上很多介绍。现在国内比较火的还是EMQ ,EMQ官方介绍:
    1 稳定承载大规模的 MQTT 客户端连接,单服务器节点支持50万到100万连接。
    2 分布式节点集群,快速低延时的消息路由,单集群支持1000万规模的路由。
    3 消息服务器内扩展,支持定制多种认证方式、高效存储消息到后端数据库。
    4 完整物联网协议支持,MQTT、MQTT-SN、CoAP、WebSocket 或私有协议支持

  • 我所选的mqtt 服务器是 EMQ (官网地址:http://www.emqtt.com), 部署在云服务器centos7.5上(如果没有云服务器,在阿里云、百度云,腾讯云等云平台 注册个新用户可以花个10块钱左右买个一个月的最低配的云服务器),选择的EMQ版本: emqttd-centos7-v2.2.0
    下载地址:http://www.emqtt.com/downloads/2206
    百度网盘链接:https://pan.baidu.com/s/1OmAowK3wSutRoVTdzCLwKg
    提取码:9qdw

  • EMQ 下载、解压、上传云服务器、启动 ( 这些在EMQ官方文档上都有介绍 )

    • 下载了 emqttd-centos7-v2.2.0.zip ,在本地解压后,上传到准备好的云服务器(系统centos7.5) 上,我放在了家目录下,如下图
      在这里插入图片描述
  • 将emqttd 目录下所有文件都赋予执行权限(忘了哪些文件需要权限了,偷懒一次都改了): chmod 755 emqttd
    在这里插入图片描述

  • 进入emqttd/bin/ 目录启动emq 服务,如下图:
    在这里插入图片描述

  • 如果没有提示 start successfully! , 那么 去emqttd/log 目录下 看下erlang.log.1 文件内容。

  • 查看运行状态 ./emqttd_ctl status
    在这里插入图片描述

# 启动emqttd
./emqttd start

# 检查运行状态
./emqttd_ctl status

# 停止emqttd
./emqttd stop
  • EMQ 的 Web 管理控制台(Dashboard)
    EMQ 消息服务器启动后,会默认加载 Dashboard 插件,启动 Web 管理控制台。用户可通过 Web 控制台,查看服务器运行状态、统计数据、客户端(Client)、会话(Session)、主题(Topic)、订阅(Subscription)、插件(Plugin)。
    控制台地址: http://127.0.0.1:18083, 默认用户: admin,密码:public ,我这里安装所在服务器ip是106.13.92.221 , 我在浏览器上 输入:http://106.13.92.221:18083
    在这里插入图片描述
    在这里插入图片描述
  • EMQ 服务器的详细介绍(如:EMQ服务器参数调优,集群搭建等等) 自行阅读 EMQ官方文档 http://www.emqtt.com/docs/v2/index.html.

mqtt 客户端图形调试工具 Eclipse Paho Java 下载

mqtt客户端图形调试工具 Eclipse Paho Java 使用案例

  • 演示流程:订阅一个主题topic为 test,然后 发布主题topic为 test 的消息 , 如果正常的话 可以看到收到了订阅消息 .(下面ip是我当前服务器ip,改成你自己的服务器地址) ,如下图
    在这里插入图片描述

    • 这里能够不输入账号密码就登录了是因为emq服务配置默认打开匿名认证,更改相关配置重启,这里就需要在选项里面设置 登录的账号密码才能连接。emq服务配置在emq官网有详细介绍。
    • 上面出现的 服务质量: 0 至多一次,1 至少一次 ,2 刚好一次 。具体选几根据项目需求决定,比如设备不停推送消息,偶尔漏一条不要紧的选择0,希望每条消息都能收到且不是那种一点差错都不能出的(如涉及到钱,重要信息) 那么选择1, 不能出一点差错的选择2。注: 2的开销最大,若不是必须不选择2。
    • 在 “选项” 栏 里面可以 开启登录 以及 遗愿调试 等功能,要测试 遗愿 的话一个客户端是没法测的,多开一个自己尝试吧。
      在这里插入图片描述
    • 关于遗愿的作用: 当 连接MQTT服务器时设置了遗愿的客户端 异常退出,心跳超时后MQTT服务器会将该客户的遗愿消息发布出去,订阅了该遗愿消息的客户端会收到通知。总的来说,就是设置(app、设备)等客户异常退出(比如,断网) 通知应用服务器的作用 (这个通知会有延迟,延迟时间和心跳有关)。
      实际项目场景: 应用app服务器 监听了 主题/logout 的消息, 客户端app 连接MQTT服务器时 设置了遗愿 主题:/logout , 消息内容 {当前app用户的id} , 当用户app网络断开,过了一段时间后,MQTT服务器发现这个连接的APP客户端心跳停止很久了(和超时时间有关) ,认为app客户端已经异常退出了,然后将其连接时设置的遗愿消息发布出来主题:/logout。服务器由于已经订阅了主题/logout的消息,所以能收到这条消息,消息内容中是app用户的id,然后服务器就可以做一些下线处理了。
    • 想要深入可以看mqtt源码了解。
    • 这里只是简单介绍了调试工具的使用,更多详细说明另开一章介绍吧

MQTT 客户端 连接、发布、订阅 源码 参考

接入使用mqtt协议的的java后端应用app服务器框架源码

  • 关于如何在java后端 应用app服务器中接入使用mqtt:(mqtt连接,mqtt断连重连,mqtt订阅、发布以及接口的快速开发 框架源码,不是简单的连接、发送、订阅测试demo代码,是 项目中mqtt框架代码) ,我会在后面有空时间再来写,如果迫切需要源码的话,可以留言,我会短期内分享出来。
  • 注: Android前端要接入使用mqtt的话也可以参考,都是java语言实现 。

结束语

本章纯粹只是emq服务搭建使用的入门,让你们能够真正的将整个流程跑一遍(上述过程我都特意重装系统后从头操作的,只要按照我说的做一定是能够启动成功的,并且 客户端调试工具也能正常调试成功 ),知道mqtt 是个什么东东 ,怎么安装使用,不至于初次接触一脸茫然不知所措到最后放弃(我就有过这种情况,有一个项目准备尝试用mqtt,但当时时间不是很充足比较急,到处乱找文档杂七杂八看的云里雾里没个方向,最终放弃mqtt 还是使用netty开发项目。后面又来了个新的项目,而且时间相对充足,这次的项目成功使用mqtt开发完成)。

有些地方只是点了一下没有深入分析,这个太耗时间精力。当然有空闲时间的情况下我会把一些心得体会分享出来,不管是好的框架源码,还是项目使用过程中踩到的坑 都会整理 分享出来。

猜你喜欢

转载自blog.csdn.net/a704397849/article/details/88533875