MQTT与EMQ

news/2025/2/13 5:12:47/

文章目录

  • 1 MQTT协议与EMQ中间件
    • 1.1 物联网消息协议MQTT
      • 1.1.1 什么是MQTT
      • 1.1.2 MQTT相关概念
      • 1.1.3 消息服务质量QoS——信息的可靠投递
        • 1.1.3.1 QoS0——消息服务质量为0,消息发送至多一次
        • 1.1.3.2 QoS1——消息发送至少一次
        • 1.1.3.3 QoS2——消息发送仅一次
        • 1.1.3.4 不同情况下客户端收到的消息QoS
      • 1.1.4 topic通配符匹配规则
        • 1.1.4.1 层级分隔符:/
        • 1.1.4.2 多层通配符:#
        • 1.1.4.3 单层通配符:+
      • 1.1.5 MQTT优点
    • 1.2 物联网消息中间件EMQX
      • 1.2.1 什么是EMQX
      • 1.2.2 EMQ环境安装——基于Docker
      • 1.2.3 EMQ客户端
        • 1.2.3.1 EMQDashboard
        • 1.2.3.2 EMQTTX
      • 1.2.4 延迟消息
      • 1.2.5 共享订阅
        • 1.2.5.1 不带群组的共享订阅
        • 1.2.5.2 带群组的共享订阅
    • 1.3 Eclipse Paho
      • 1.3.1 Eclipse Paho是什么
      • 1.3.2 Eclipse Paho快速入门
        • 1.3.2.1 集成Eclipse paho
        • 1.3.2.2 发布消息到EMQ
        • 1.3.2.3订阅消息

1 MQTT协议与EMQ中间件

1.1 物联网消息协议MQTT

1.1.1 什么是MQTT

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议):其时基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议。
在这里插入图片描述

客户端服务端(消息代理Broker)
发布其他客户端可能会订阅的消息接收来自客户端的网络连接
订阅其他客户端发布的消息接收客户点发布的应用消息
退订或删除应用程序的消息处理来自客户端的订阅和退订请求
断开与服务器的连接向订阅的客户转发应用和程序消息

1.1.2 MQTT相关概念

MQTT常用方法解释
CONNECT客户端连接到服务器
CONNACK连接确认
PUBLISH发布消息
PUBACK发布确认
PUBREC发布的消息已接收
PUBREL发布的消息已释放
PUBCOMP发布完成
SUBSCRIBE订阅请求
SUBACK订阅确认
UNSUBSCRIBE取消订阅
UNSUBACK取消订阅确认
PINGREQ客户端发送心跳
PINGRESP服务端心跳响应
DISCONNECT断开连接
AUTH认证

1.1.3 消息服务质量QoS——信息的可靠投递

MQTT协议中规定了消息服务质量(QoS),其保证了在不同网络环境下信息传递的可靠性。MQTT设计了QoS0、QoS1、QoS2三个QoS等级。

QoS等级说明注意
QoS0消息最多传递一次消息发布完全依赖底层TCP/IP网络,会发生消息丢失,消息不会被接收端应答,也不会被发送者存储再发送,称之为“即发即弃
QoS1消息至少传递一次
QoS2消息传递一次

1.1.3.1 QoS0——消息服务质量为0,消息发送至多一次

消息服务质量为0(QoS0)消息发送至多一次,消息发布完全依赖底层TCP/IP网络,会发生消息丢失,消息不会被接收端应答,也不会被发送者存储再发送,称之为“即发即弃

在这里插入图片描述

1.1.3.2 QoS1——消息发送至少一次

消息服务质量为1(QoS1)消息发送至少一次确保消息送达,但可能发生消息重复投递,发送者会存储消息直到接收者反馈回Puback(发布确认)格式的应答确认

在这里插入图片描述

1.1.3.3 QoS2——消息发送仅一次

消息服务质量为2(QoS2)消息发送仅一次确保消息到达一次,他将相应的处理Publish(发布)消息,并通过Pubrec(发布收到)向发送方确认。

在这里插入图片描述

1.1.3.4 不同情况下客户端收到的消息QoS

发布消息的QoS主题订阅的QoS接收消息的QoS
000
010
020
121
211
222

总结由上表得出:若,发布的消息QoS为m,主题订阅的消息QoS为m,接收消息的QoS为h时:

  • ① 若m=0或n=0,则h=0;
  • ② 若0<m< n ,则h=n;
  • ③ 若0<n<m,则h=n。

1.1.4 topic通配符匹配规则

1.1.4.1 层级分隔符:/

层级分隔符 / :用来分割主题树的每一层,为主题(Topic)空间提供分等级结构,适用于:当两个通配符在一个主题中出现的时候。
例如:love/you/with/all/my

1.1.4.2 多层通配符:#

多层通配符 # :多层通配符表示≥0的层次。因此,love/#也可以匹配到单独的love,此时#代表love后边没有的0层。
注意:多层通配符必须是主题树最后一个字符,例如:love/#可以匹配到love,但是love/#/with是无效的

1.1.4.3 单层通配符:+

单层通配符 + :只匹配一层,例如:love/you/#匹配love/you/with,但是不能匹配love/you/with/all,他只额能通配一个字符。

1.1.5 MQTT优点

① 精简,不添加冗余功能;② 发布/订阅模式,方便消息在传感器间传递,客户端与服务端完成解耦;③ 动态创建主题(不需要预先创建主题),零运维成本。④支持连续的会话保持和控制(心跳检测);⑤ 提供服务质量(quality of service level:QoS)管理;⑥ 不强求传输数据格式与类型。

1.2 物联网消息中间件EMQX

1.2.1 什么是EMQX

EMQ X Broker 是基于高并发的Erlang/OTP语言平台开发,支持百万级连接与分布式集群架构,基于MQTT协议的消息服务器。
参考EMQX官网
在这里插入图片描述

EMQX特点:

  • ① 基于MQTT协议实现得开源消息中间件,②支持桥接和共享订阅,③中国本地技术支持服务。

1.2.2 EMQ环境安装——基于Docker

 docker pull emqx/emqx:v4.1.0docker run -tid --name emqx -p 1883:1883 -p 8083:8083 -p 8081:8081 -p 8883:8883 -p 8084:8084 -p 18083:18083  emqx/emqx:v4.1.0

1.2.3 EMQ客户端

1.2.3.1 EMQDashboard

MQTT X 是 EMQ 开源的一款优雅的跨平台 MQTT 5.0 桌面客户端

1.2.3.2 EMQTTX

EMQ X 提供 Dashboard客户端方便用户管理设备与监控相关指标。
默认用户名是 admin,密码是 public

1.2.4 延迟消息

步骤:

  • ①用户需开启模块的emqx_mod_delayed
    在这里插入图片描述
  • ②主题格式:$delayed/{DelayInterval}/{TopicName}

注意
① 使用 $delayed 作为主题前缀的消息都将被视为需要延迟发布的消息。
② {DelayInterval}: 指定该 MQTT 消息延迟发布的时间间隔,单位是秒,允许的最大间隔是 4294967 秒。
③ {TopicName}: MQTT 消息的主题名称。

1.2.5 共享订阅

注意:分组发送是每一个组里选一个,因此十分适合微服务集群。

1.2.5.1 不带群组的共享订阅

格式:$queue/{TopicName}
在这里插入图片描述

EMQ X的共享订阅支持均衡策略配置(默认Random): etc/emqx.con在这里插入图片描述

1.2.5.2 带群组的共享订阅

$share/<group-name>/{TopicName}

在这里插入图片描述

1.3 Eclipse Paho

1.3.1 Eclipse Paho是什么

Eclipse paho 实现mqtt协议java客户端。类似于Mysql于JDBC。

1.3.2 Eclipse Paho快速入门

1.3.2.1 集成Eclipse paho

<dependency><groupId>org.eclipse.paho</groupId><artifactId>org.eclipse.paho.client.mqttv3</artifactId><version>1.2.5</version>
</dependency>

1.3.2.2 发布消息到EMQ

@GetMapping("/publish")
public void publish() throws MqttException {MqttClientPersistence persistence = new MemoryPersistence();;//内存持久化MqttClient client = new MqttClient("tcp://192.168.200.128:1883", "abc", persistence);//连接选项中定义用户名密码和其它配置MqttConnectOptions options = new MqttConnectOptions();options.setCleanSession(true);//参数为true表示清除缓存,也就是非持久化订阅者,这个时候只要参数设为true,一定是非持久化订阅者。而参数设为false时,表示服务器保留客户端的连接记录options.setAutomaticReconnect(true);//是否自动重连options.setConnectionTimeout(30);//连接超时时间  秒options.setKeepAliveInterval(10);//连接保持检查周期  秒options.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1_1); //版本client.connect(options);//连接client.publish("topic", "发送内容".getBytes(), 2, false);}

1.3.2.3订阅消息

@GetMapping("/subscribe")
public void subscribe() throws MqttException {MqttClientPersistence persistence = new MemoryPersistence();;//内存持久化MqttClient client = new MqttClient("tcp://192.168.200.128:1883", "abc", persistence);//连接选项中定义用户名密码和其它配置MqttConnectOptions options = new MqttConnectOptions();options.setCleanSession(true);//参数为true表示清除缓存,也就是非持久化订阅者,这个时候只要参数设为true,一定是非持久化订阅者。而参数设为false时,表示服务器保留客户端的连接记录options.setAutomaticReconnect(true);//是否自动重连options.setConnectionTimeout(30);//连接超时时间  秒options.setKeepAliveInterval(10);//连接保持检查周期  秒options.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1_1); //版本client.setCallback(new MqttCallbackExtended() {@Overridepublic void connectionLost(Throwable throwable) {System.out.println("连接丢失!");}@Overridepublic void messageArrived(String s, MqttMessage mqttMessage) throws Exception {System.out.println( "接收到消息  topic:" +s+"  id:"+mqttMessage.getId() +" message:"+ mqttMessage.toString());}@Overridepublic void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {}@Overridepublic void connectComplete(boolean b, String s) {System.out.println("连接成功!");}});client.connect(options);//连接client.subscribe("test");  //订阅主题}

http://www.ppmy.cn/news/224793.html

相关文章

【Mysql数据库从0到1】-入门基础篇--sql语句简单使用

【Mysql数据库从0到1】-入门基础篇--sql语句简单使用 &#x1f53b;一、数据库创建、删除、选择1.1 &#x1f343; create database 创建数据库1.2 &#x1f343; 使用 mysqladmin 创建数据库1.3 &#x1f343; drop 命令删除数据库--一般不建议在数据库执行delete、drop等命令…

益阳定制网站多少钱,益阳品牌网站建设多少钱

2021年做一个网站需要多少钱&#xff1f;这是大多数小企业在建立网站之前&#xff0c;最为关心的问题。在这里&#xff0c;我们将探讨创建小型商业网站的一次性成本和持续成本。 建立一个网站需要多少钱 1.域名费用 URL&#xff08;又名域名&#xff09;是人们在浏览器中输…

app开发公司:手机app开发多少钱

app开发公司&#xff1a;手机app开发多少钱&#xff1f; 作者&#xff1a;北京朗毓圣元科技 手机app开发多少钱&#xff1f;这是很多传统企业在布局移动互联网时经常思考的问题&#xff0c;app开发公司建议企业用户在进行手机app开发前&#xff0c;需要仔细了解自己的app功能…

iqoo5大概多少钱

iQOO 5提供了皓影与星溯两种配色版本&#xff0c;整体外观凝练而不张扬&#xff0c;颇具质感&#xff1b;iQOO 5 Pro则带来了赛道版与传奇版两种配色版本&#xff1a;赛道版打造出专属的碳纤维纹理后盖&#xff0c;采用AG工艺玻璃后盖&#xff0c;哑面凯夫拉带来如汽车内饰的高…

Excel-VLOOKUP函数

vlookup函数主要用于查找核对数据。 VLOOKUP(lookup_value, table_array, col_index_num, range_look) 上面参数的含义分别是&#xff1a; 参数含义lookup_value用谁去找table_array匹配对象范围col_index_num返回第几列的值range_look匹配方式 例子&#xff1a; 想要在 H2 单元…

ERP一套多少钱?

ERP企业资源计划管理&#xff0c;基于信息技术、互联网技术基础上&#xff0c;一体化整理管理企业资源&#xff0c;以系统化思想为企业以及员工的决策提供平台。目前国外ERP使用已经逐渐普遍化&#xff0c;国内也开始广泛起来&#xff0c;而根据企业选择的品牌、系统功能、购买…

Excel表格vlookup函数

Excel表格vlookup函数 一、基础用法1、精确匹配&#xff08;精确查找&#xff09;2、近似匹配&#xff08;区间查找&#xff09;3、反向查找4、多条件查找 二、进阶用法&#xff08;公式嵌套&#xff09;1、屏蔽错误值&#xff08;IFERROR&#xff09;2、关键字词查找&#xff…

LiangGaRy-学习笔记-Day18

1、知识回顾 1.1、磁盘管理 磁盘使用之前需要先格式化&#xff0c;格式化之前需要先分区&#xff0c;也就先分区再格式化才能使用 linux磁盘管理大致分为五个步骤&#xff1a;首先添加相应的磁盘&#xff08;/dev/sda、sdb、sdc、sde…&#xff09;&#xff0c;然后是对相应磁…