MQTT消息队列遥测传输协议,EMQX消息服务器搭建以及使用Springboot项目连接EMQX服务器实现消息推送和接收


前言

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)两部分:

  1. Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload);
  2. 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对应的最新版本:
在这里插入图片描述
然后按照官网的安装方式进行安装即可:

  1. 首先下载zip压缩包,上传到Linux服务器上
  2. 解压压缩包:unzip emqx-4.4.3-otp24.1.5-3-el7-amd64.zip
  3. 运行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的客户端会成功接收到消息。

五、阿里云报文使用

  1. 配置阿里云设备管理平台。(后续可能更新本处)

参考链接:
https://www.runoob.com/w3cnote/mqtt-intro.html
https://blog.csdn.net/weixin_43888891/article/details/121880848

总结

本文主要讲解了什么是mqtt协议,mqtt通信的测试工具mqttx,基于mqtt协议的emqx服务器的搭建,以及使用Springboot集成emqx服务器,并进行了消息推送、订阅和接收任务。

猜你喜欢

转载自blog.csdn.net/qq_43403676/article/details/124496310