简单了解MQTT(二)- 使用篇

一 主题订阅

MQTT主题(topic)由一或多个斜杠分割的层级组成。eg:level1/level2/level3/data(建议避免斜杠开头)
订阅/发布 前无需提前创建

主题命名规范:

  1. 至少包含一个字符。
  2. 可以输入空格
  3. 大小写敏感,注意区分。
  4. “/” 是一个有效的主题,可用于表示广泛的主题或用作同时订阅多个主题的通配符。

多主题订阅(主题通配符):

  1. 单层级通配符:+ (替换单个主题层级) eg:level1/+/level3/data
  2. 多层级通配符:# (必须放在主题字符的最后,且只能有一个) eg:level1/#

以$符号开头的主题有专门的目的。用于MQTT代理(broker)的内部统计信息,请勿订阅及禁止发布

二 多个客户端订阅

普通订阅:每发布一条消息,每个订阅的客户端都会收到该消息副本

共享订阅:发布在该topic的消息只会生成一个消费副本,投递给其中一个客户端。
共享订阅组:想共享订阅同一topic的客户端集合
如何使用:
1.无需修改客户端,只需要订阅时订阅共享订阅主题即可。
2.指定共享订阅的负载均衡算法:修改emqx服务的配置etc/emqx.conf
##设置共享订阅的分发策略
broker.shared_subscription_strategy = random (或round_robin, sticky, hash)
##开启或关闭共享订阅对于 qos1/qos2 消息的 ACK 检查功能。开启后,如果投递到某个订阅者但收不到ACK,将尝试投递给订阅组里的下一个订阅者。
broker.shared_dispatch_ack_enabled = true

共享订阅主题:遵循该命名规范的主题 $share/{Share Name}/{Topic Filter}
释义:
$share 固定前缀
{Share Name} 表示当前共享订阅使用的共享名 即Group Name 共享订阅组名
{Topic Filter} 我们实际想要订阅的主题
{Share Name}/{Topic Filter} 才唯一地标识一个共享订阅组

共享订阅和普通订阅互不影响,当某个消息同时与共享订阅和普通订阅匹配时,服务端会向每个匹配的普通订阅的客户端发送该消息的副本,同时向每个匹配的共享订阅组中的其中一个会话发送该消息的副本
在这里插入图片描述

共享订阅的核心在于服务端如何在客户端之间分配消息负载。比较常见的负载均衡策略有以下几种:
随机(Random),在共享订阅组内随机选择一个会话发送消息。
轮询(Round Robin),在共享订阅组内按顺序选择一个会话发送消息,循环往复。
哈希(Hash),基于某个字段的哈希结果来分配。
粘性(Sticky),在共享订阅组内随机选择一个会话发送消息,此后保持这一选择,直到该会话结束再重复这一过程。
本地优先(Local),随机选择,但优先选择与消息的发布者处于同一节点的会话,如果不存在这样的会话,则退化为普通的随机策略。

三 QoS(Quality of Service 服务质量)

QoS等级 是消息可靠性核心保障手段,分为0(最多一次)、1(至少一次)和2(正好一次)
QoS 0 会消息丢失
QoS 1 会消息重复
QoS 2 既可以保证消息到达,也可以保证消息不会重复,但传输成本最高。QoS 2 能够达到的吞吐一般仅为 QoS 0、1 的一半左右

四 消息重复

场景:发送方未收到接收方的 PUBACK 报文,重新发送消息
解决:在QoS 2中,设计了一套复杂的握手机制来防止消息的重复。该过程包括四种类型的控制报文:PUBLISH、PUBREC、PUBREL和PUBCOMP。首先,发送方发送含有消息的PUBLISH报文并等待PUBREC,接收PUBREC后,发送方发出PUBREL并等待PUBCOMP。当PUBCOMP被接收方收到后,双方均可确认消息只被成功接收一次。

五 消息丢失

QoS 0 消息最主要的丢失场景:TCP连接关闭、重置,有可能丢失消息。
解决:QoS 1要求消息至少传递一次,发送端存储消息直到从接收端收到 PUBACK 回执,在没有收到回执时会重新发送

六 消息顺序

MQTT并不保证消息的绝对顺序性。消息在发布者和订阅者之间传递时,可能会因为网络延迟或其他因素而导致乱序。只能通过业务手段来保证顺序。

使用QoS1或QoS2等级的消息传输时,即使网络不稳定导致重发,MQTT协议也确保了最终消息的处理顺序。这是因为,每条消息都会被分配一个唯一的标识符,该标诈符会在消息送达过程中携带,以此来保证消息传输的顺序性。同理,可在消息中使用时间或递增版本来控制顺序

七 遗嘱消息LWT(Last Will and Testament)

遗嘱消息的用途主要包括:
状态通知: 客户端可以设置遗嘱消息来通知其他设备或应用程序自己的状态变化,例如设备离线状态。
清理资源: 遗嘱消息也可用于清理资源,例如释放某些保留的状态或资源。

在客户端建立连接时,可以指定一个遗嘱消息及其相关的主题。如果客户端由于网络故障或其他原因非正常断开连接,遗嘱消息将由服务器自动发布。

### 回答1: MQTTClient-C是一个基于C语言开发的MQTT客户端库。MQTT是一种轻量级的消息传输协议,被广泛应用于物联网等场景中。MQTTClient-C可以方便地实现MQTT客户端的开发,提供了一套简洁易用的接口。 首先,使用MQTTClient-C可以快速实现MQTT客户端的开发,无需从头开始设计和实现MQTT协议的通讯细节。库中封装了MQTT协议的各种细节,包括连接、订阅、发布等操作,开发者只需调用相应的接口即可完成。 其次,MQTTClient-C提供了多种不同层次的应用编程接口,可满足不同开发需求。开发者可以根据自身需求选择合适的API进行开发,使得代码更加简洁易读。 此外,MQTTClient-C还提供了丰富的可配置选项,可以根据实际需求灵活配置客户端参数。比如可以设置重连间隔、心跳频率、最大重试次数等,以适应各种网络环境和设备限制。 最后,MQTTClient-C具备良好的可移植性和跨平台性。它可以在不同的操作系统和硬件平台上运行,包括嵌入式设备和服务器等。这使得开发者能够更加灵活地选择合适的平台进行开发和部署。 综上所述,应用MQTTClient-C可以方便地实现MQTT客户端的开发,并且具备灵活的可配置性和跨平台性,是一种非常实用的工具。无论是在物联网领域还是其他场景中,MQTTClient-C都可以帮助开发者快速搭建稳定可靠的MQTT系统。 ### 回答2: MQTTClient-C是一个用于C语言的MQTT客户端库,用于与MQTT代理服务器进行通信。该库提供了一组API,使开发者能够轻松地建立与MQTT服务器的连接,发布和订阅消息。 使用MQTTClient-C,可以实现以下功能: 1. 建立与MQTT服务器的连接:使用MQTTClient-C,可以通过提供MQTT服务器的地址和端口号来建立与服务器的连接。 2. 发布消息:通过调用MQTTClient-C提供的API,可以向MQTT服务器发布消息。可以指定消息的主题,质量、消息内容等参数。 3. 订阅消息:使用MQTTClient-C,可以通过提供订阅的主题来订阅特定的消息。可以指定消息的质量等级。 4. 处理消息回调:MQTTClient-C允许开发者为接收到的消息注册回调函数。当接收到订阅的消息时,会调用注册的回调函数进行处理。 5. 支持SSL连接:MQTTClient-C支持通过SSL加密来建立与MQTT服务器的安全连接。 6. 消息持久化:MQTTClient-C支持消息持久化,即当未成功发送的消息被储存在本地,直到成功发送为止。 7. 支持遗嘱消息:MQTTClient-C支持发布遗嘱消息,即当客户端异常断开连接时,会自动发布指定的遗嘱消息。 总结来说,MQTTClient-C是一个功能强大的MQTT客户端库,适用于C语言开发者。它提供了一组API,使开发者能够轻松建立与MQTT服务器的连接,发布和订阅消息,并支持SSL连接和消息持久化等功能,有助于开发者构建可靠和安全的MQTT应用程序。 ### 回答3: MQTTClient-C 是一种用于在C语言环境下进行MQTT通信的开源客户端库。它基于MQTT协议实现了与MQTT代理服务器进行数据交互的功能。 MQTTClient-C 提供了一套简单易用的API,使开发人员能够快速地在C语言项目中实现MQTT通信功能。使用MQTTClient-C,我们可以轻松地订阅主题、发布消息以及处理订阅消息的回调。 MQTTClient-C 的特点包括: 1. 轻量级:MQTTClient-C 代码库非常小巧,可以轻松地嵌入到各种资源有限的嵌入式系统中,适用于各种物联网设备。 2. 跨平台:MQTTClient-C 支持各种主流操作系统,如Windows、Linux、FreeRTOS等,可以在不同平台上无缝地进行移植和集成。 3. 稳定可靠:MQTTClient-C 实现了MQTT 3.1.1版本的协议,支持QoS级别0、1和2,可以确保消息的可靠传输及交付。 4. 灵活可扩展:MQTTClient-C 提供了多样化的配置选项,可以根据需要进行灵活的参数设置,从而满足不同场景的需求。 使用MQTTClient-C,我们可以快速地实现物联网设备与服务器之间的即时通信和数据交换。例如,我们可以将传感器数据通过MQTTClient-C发布到MQTT代理服务器上,并通过订阅机制实现实时数据的传输和处理。同时,我们也可以通过MQTTClient-C订阅特定主题,实时接收服务器发送的指令或控制信息。 总而言之,MQTTClient-C 是一个功能强大且易于使用的C语言MQTT客户端库,使我们能够快速地开发出高效可靠的物联网应用程序。无论是开发嵌入式设备还是服务器端应用,MQTTClient-C 都是一个非常有价值的工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值