前言
MQTT协议是消息队列遥测传输协议,是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通信协议,提供有序、无损、双向连接,有IBM发布。订阅topic->发布->推送,使用这种步骤实现信息传递。基于服务器进行,如果没有服务器,两者不能产生任何信息传递,一切都得基于服务器进行。 mqtt相当于中断(没有信息的时候,可以是空闲状态),tcp相当于查询(必须不停地查询)。
一、MQTT是什么?
MQTT(Message Queuing Telemetry Transport)是基于客户端-服务器的消息发布/订阅传输协议。基于topic的推送与发送,有着三种通信质量0,1,2,数字越大,表示通信质量越高(确定消息是否成功发送),mqtt在阿里云使用非常广泛,但不是阿里巴巴发明的。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。 MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:
- Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload);
- payload,可以理解为消息的内容,是指订阅者具体要使用的内容。
二、MQTTX是什么?
2.1、MQTTX简介
- MQTT X 是一款开源的 MQTT 5.0 桌面测试客户端,它支持在 macOS,Linux,Windows 操作系统上运行。
- MQTT X 支持创建多个同时在线的 MQTT 客户端,方便用户快速测试 MQTT/TCP、MQTT/TLS 、MQTT/WebSocket 的连接/发布/订阅功能及其他 MQTT 协议特性。
2.2、MQTTX安装和使用
MQTT下载地址:https://www.emqx.com/zh/try?product=MQTTX,下载之手是一个.exe文件,直接傻瓜式安装即可。
安装MQTTX之后,就可以对MQTT服务器进行测试了,如果还没有部署mqtt服务器可以使用mqttx自带的测试服务器。点击添加新的连接,进入连接添加界面: 作测试使用,name、username和password都可以随便起。 设置订阅: 向订阅,发送消息,验证消息的发送和接收:
发送消息之后,可以发现订阅该topic的客户端均接收到了消息。
三、EMQX是什么?
3.1、EMQX简介
排名第一的开源MQTT消息服务器。在EMQX服务器上可以完成创建客户(client),创建话题(topic)订阅话题以及进行推送消息和接收消息等操作。 EMQX控制台界面如下:
3.2、EMQX安装及使用
EMQX下载地址https://www.emqx.com/zh/try?product=broker 安装开源版本的即可,我要部署在Linux(Centos7.6)系统上,选的Centos7对应的最新版本: 然后按照官网的安装方式进行安装即可:
- 首先下载zip压缩包,上传到Linux服务器上
- 解压压缩包:
unzip emqx-4.4.3-otp24.1.5-3-el7-amd64.zip - 运行emqx服务器:
./bin/emqx start
执行完成之后,访问:http://你的Ip地址:18083/#/ 即可进入EMQX控制台: 在控制台中,我们可以看到有对应的监控(monitor)、客户端(client)、主题(topic)、订阅(subscription)等内容,可以在其中对这些信息进行管理。
四、Springboot项目集成EMQX
代码详解就不再说明了,这里给出代码地址: 示例项目地址:https://github.com/Haojunzuo/mqtt01 代码简介: 首先需要加入maven依赖的坐标,然后在application.yml文件中进行配置mqtt的客户端
- application.yml配置mqtt服务客户端
mqtt:
hostUrl: tcp://150.158.10.136:1883
username: admin
password: public
client-id: mqtt_test04
cleanSession: true
reconnect: true
timeout: 100
keepAlive: 100
defaultTopic: mqtt_test06/#
isOpen: true
qos: 1
server:
port: 9090
使用MqttProperties类对application.yml文件的配置进行读取。
MqttSendClient和MqttSendCallBack类用于发送消息和发送消息的回调。
MqttAcceptClient和MqttAcceptCallBack类用于接收消息和接收到消息的回调。
使用MqttCondition类来控制启动项目的时候是否启动mqtt,对应的控制参数是mqtt.isOpen,是在application.yml里面设置的。
使用MqttConfig类设置在启动服务的时候开启监听客户端
进行消息的发送和接收都是没问题的,如果绑定的客户端订阅了某个topic,当其他client向该topic发送消息的时候,项目会成功接收到消息并执行接收消息的回调函数。如果绑定的客户端向某个topic发送消息,那么会执行发送消息回调函数。并且其他订阅了该topic的客户端会成功接收到消息。
五、阿里云报文使用
- 配置阿里云设备管理平台。(后续可能更新本处)
参考链接: https://www.runoob.com/w3cnote/mqtt-intro.html https://blog.csdn.net/weixin_43888891/article/details/121880848
总结
本文主要讲解了什么是mqtt协议,mqtt通信的测试工具mqttx,基于mqtt协议的emqx服务器的搭建,以及使用Springboot集成emqx服务器,并进行了消息推送、订阅和接收任务。
|