【MQTT】MQTT协议与指令下发;MQTT与Kafka比较

打印 上一主题 下一主题

主题 909|帖子 909|积分 2727

相干文章:
(一)MQTT协议与指令下发;MQTT与Kafka比较
(二)用MQTT在Spring Boot项目中实现异步消息通信
  
一、MQTT协议



  • 具体讲讲MQTT协议
    当涉及到物联网装备通信时,MQTT(Message Queuing Telemetry Transport)是一种轻量级、开放、机动的协议。MQTT最初是为低带宽、不稳定网络环境下的传感器和装备之间的通信而设计的,但现在已经广泛应用于各种应用范畴。
    以下是关于MQTT协议的具体表明:
    1. 发布/订阅模型:

    • 发布者(Publisher): 负责将消息发布到特定的主题。
    • 订阅者(Subscriber): 订阅特定主题,以接收相干消息。
    • 主题(Topic): 是消息的分类标签,用于描述消息的内容。发布者发布消息到特定主题,而订阅者则订阅特定主题。
    2. 连接和会话:

       

    • MQTT利用基于TCP的连接,但也可以在WebSocket上运行。
    • 客户端和服务器之间创建长连接,可以维护一个持久的会话状态。
    • 客户端可以选择保持与服务器的连接状态,以接收实时消息。
    3. QoS级别(Quality of Service Levels):

       

    • QoS 0: 最多一次传递,消息可能会丢失,不包管传递。
    • QoS 1: 至少一次传递,消息被确认,但可能会重复。
    • QoS 2: 恰好一次传递,确保消息只传递一次,但是通信开销较大。
    4. 保留消息:

       

    • 发布者可以设置消息为保留消息,这意味着新的订阅者在订阅相干主题时会收到最新的保留消息。
    5. Last Will and Testament(遗嘱消息):

       

    • 客户端可以设置遗嘱消息,以便在连接意外断开时通知其他订阅者。
    6. 适用场景和优势:

       

    • 适用于低带宽、高延迟、不稳定网络环境下的物联网装备通信。
    • 轻量级协议,淘汰通信开销。
    • 支持发布/订阅模型,允许机动的通信架构。
    • 易于实现,有许多开源实现和库可用。
    7. 消息格式:

       

    • MQTT消息由固定头、可变头和消息体组成。
    • 固定头包含消息范例、标志位等信息。
    • 可变头包含不同范例消息的特定信息。
    • 消息体包含现实的消息内容。
    8. 安全性:

       

    • MQTT本身并没有提供加密功能,但可以在其上利用TLS/SSL进行加密。
    • 用户名和密码可以用于身份验证。
    9. 开源实现和协议版本:

       

    • Eclipse Mosquitto、HiveMQ、EMQ等是一些常见的MQTT服务器实现。
    • MQTT 3.1和MQTT 5.0是两个主要的协议版本,其中MQTT 5.0提供了更多的功能和改进。

    MQTT协议的机动性和轻量级特性使其成为连接各种装备和应用程序的抱负选择,尤其在物联网范畴中。学习MQTT协议可以资助设计和实施可靠的装备通信体系。

二、指令下发

指令下发通常指的是通过某种通信协议向远程装备发送命令或控制信息。这个过程通常是在分布式体系或物联网(IoT)中的装备管理中利用的。
指令下发是将控制指令从上级控制体系下发发送给下级实行体系以实现控制功能。
具体来说:


  • 指令下发的目的是向下级体系发布控制命令,如开关机、参数设置等。
  • 上级体系负责生成控制指令,下级体系负责接收并实行指令。
  • 指令通常以数字或字符形式表示,通过网络通信等方式从上至下传输。
  • 指令下发是一个控制链路的关键环节,实现上下级体系之间的命令传输与实行。
一些常见的指令下发场景:


  • SCADA体系向过程控制器下发控制参数配置指令。
  • MES体系向生产装备下发产物切换指令。
  • 车联网平台向交通指挥体系下发车辆调度指令。
  • 大数据中心向边缘计算集群下发任务下发指令。
  • APP下发控制指令驱动智能家电实行动作。
所以总体来说,指令下发是上下级控制体系之间实现控制功能的基础,通过它来传达和实行各种操作指令。
指令下发流程

下面是一个一般的指令下发流程:

  • 指令生成

    • 在体系的控制中心大概上层应用中,某个用户大概主动化程序生成一个需要发送给装备的指令。这个指令可能是控制装备实行某个动作、改变状态、大概请求装备发送特定信息等。

  • 指令封装

    • 生成的指令需要按照装备能明白的通信协议进行封装。这可能包括将指令转换为特定的数据格式、添加必要的协议头部信息等。

  • 指令传输

    • 封装后的指令通过通信协议传输到目的装备。这可以通过不同的通信方式实现,例如MQTT、HTTP、CoAP等。在物联网中,MQTT是一个常用的协议,因为它轻量、机动,适合在资源受限的装备上利用。

  • 装备接收

    • 目的装备通过相应的通信协议接收到指令。装备需要可以或许明白协议并正确解析接收到的指令。

  • 指令解析

    • 装备解析接收到的指令,明白其中的控制或操作内容。

  • 实行指令

    • 装备实行指令对应的操作。这可能包括改变装备状态、实行某种动作、大概返回请求的信息。

  • 相应生成

    • 装备生成实行结果的相应,这个相应也需要按照相应的协议进行封装。

  • 相应传输

    • 装备将相应传输回控制中心大概上层应用。

  • 相应解析

    • 控制中心大概应用解析接收到的相应,获取装备实行指令的结果。

  • 处理结果

    • 控制中心大概应用处理装备实行指令的结果,可能会触发进一步的操作大概通知相干的体系。

在这个流程中,MQTT作为通信协议的一部分起到了很关键的作用。它提供了发布/订阅的模式,允许装备和体系之间实现松耦合的通信。在结合MQTT时,需要界说好指令的主题(Topic),确保装备和控制中心都订阅了正确的主题,以便指令的传递。
例如,在一个基于MQTT的体系中,可以按照以下步骤进行指令下发:

  • 控制中心发布一个包含指令的消息到MQTT Broker,指定了装备的主题。
  • 目的装备订阅了相应的主题,在接收到消息后解析并实行指令。
  • 装备实行指令后,可以发布一个包含实行结果的消息到MQTT Broker,指定了相应的主题。
  • 控制中心订阅了实行结果的主题,在接收到装备的相应消息后进行处理。
这样的设计使得装备和控制中心可以异步地进行通信,实现了机动而可靠的远程控制。
三、利用MQTT实现指令下发

具体步骤

在利用MQTT进行指令下发时,通常需要考虑以下几个步骤:

  • 界说MQTT主题(Topic)

    • 在MQTT中,主题是消息发布和订阅的关键。为了实现指令下发,需要界说好主题,以便装备可以或许订阅这些主题,而控制中心或应用则可以发布消息到这些主题。

  • 装备订阅主题

    • 装备需要在启动时订阅用于接收指令的MQTT主题。这样,装备就可以或许监听来自控制中心或应用的指令消息。

  • 控制中心发布指令消息

    • 控制中心或应用通过MQTT发布包含指令的消息到相应的主题。这个消息应该包含指令的内容,可能是一个JSON格式的数据,以便装备可以或许解析。

  • 装备接收指令消息

    • 装备通过MQTT接收到发布的指令消息。这通常在装备的MQTT消息处理回调中完成。

  • 解析指令

    • 装备解析接收到的指令消息,明白其中的控制或操作内容。

  • 实行指令

    • 装备实行指令对应的操作。这可能包括改变装备状态、实行某种动作、大概返回请求的信息。

代码案例

以下是一个简单的Java示例代码,演示了如何利用MQTT 客户端库进行 MQTT 指令下发:
  1. import org.eclipse.paho.client.mqttv3.*;
  2. import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
  3. public class MqttCommandSender {
  4.     public static void main(String[] args) {
  5.         String broker = "tcp://mqtt.eclipse.org:1883";
  6.         String clientId = "CommandSender";
  7.         String topic = "device/command"; // 定义指令主题
  8.         try {
  9.             MqttClient client = new MqttClient(broker, clientId, new MemoryPersistence());
  10.             MqttConnectOptions connOpts = new MqttConnectOptions();
  11.             connOpts.setCleanSession(true);
  12.             System.out.println("Connecting to broker: " + broker);
  13.             client.connect(connOpts);
  14.             System.out.println("Connected");
  15.             // 定义指令内容,可以是JSON格式的数据
  16.             String command = "{\"action\":\"start\", \"parameter\":\"value\"}";
  17.             // 发布指令到指定主题
  18.             client.publish(topic, new MqttMessage(command.getBytes()));
  19.             System.out.println("Command sent");
  20.             client.disconnect();
  21.             System.out.println("Disconnected");
  22.         } catch (MqttException me) {
  23.             me.printStackTrace();
  24.         }
  25.     }
  26. }
复制代码
上述代码演示了一个简单的指令发送器,它连接到 MQTT 署理,发布了一个包含指令的消息到指定主题。在现实应用中,需要根据需求界说更多的细节,例如处理装备相应、错误处理等。
在装备端需要实现一个 MQTT 客户端用于订阅指令主题,接收并处理来自控制中心的指令。这可能需要利用 Eclipse Paho 的 MqttCallback 接口。
四、MQTT 数据和数据库数据

MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,通常用于在装备之间传递实时数据。与传统数据库相比,MQTT 具有一些特定的特征和应用场景。
以下是 MQTT 数据和数据库数据之间的一些差异:

  • 实时性和即时性: MQTT 通常用于实时性要求较高的场景,例如物联网装备之间的实时通信。消息可以非常快速地通过 MQTT 传递,而数据库操作可能会有一些延迟。
  • 消息格式: MQTT 传递的是消息,这些消息可以采用各种格式,如 JSON、二进制数据等。数据库通常存储结构化数据,可能是表格形式的数据。
  • 存储方式: MQTT 主要用于消息传递,通常不用于数据的长期存储。数据可以被传递到订阅者,但不肯定会在中心存储。相比之下,数据库是一种持久化的存储方式,用于长期保存数据。
  • 数据结构: MQTT 的数据通常是一对多的关系,一个发布者可以将消息发送给多个订阅者。数据库中的数据通常是一对一或一对多的关系,具有固定的结构。
在一般的物联网体系中,通常会将 MQTT 数据和数据库数据结合利用:


  • MQTT 数据流向数据库: 装备产生的实时数据通过 MQTT 发送到一个消息署理,然后可以选择将这些数据存储到数据库中,以便后续分析、查询和长期存储。
  • 数据库数据供给 MQTT: 某些应用可能需要将数据库中的数据推送到装备,可以通过定期查询数据库,然后利用 MQTT 发送数据到相干的装备。
综上所述,MQTT 主要用于实时通信和消息传递,而数据库主要用于数据的长期存储和结构化查询。在现实应用中,它们通常是相辅相成的,一起构建完备的物联网体系。
五、MQTT和Kafka比较

MQTT和Kafka主要区别

MQTT和Kafka是两种主流的消息中心件二者的主要区别如下:

  • 架构设计

    • MQTT是一个单发布/订阅消息模型,Kafka采用发布/订阅和消息队列模型。
    • MQTT面向点对点通讯,Kafka面向发布/订阅,可以进行广播通讯。

  • 消息传输模式

    • MQTT消息以推方式发送,Kafka消息支持推和拉加载务。

  • 消息Durability

    • MQTT消息不支持持久化,Kafka支持消息持久化存储。

  • 性能

    • Kafka性能更高,吞吐量更大,可以处理巨大流量。MQTT吞吐量和并发本领相对较低。

  • 存储本领

    • Kafka可以对消息进行存储管理和备份,而MQTT不支持消息存储。

  • 可靠性

    • Kafka支持分布式摆设高可用,MQTT单点故障风险较高。

  • 应用场景

    • MQTT更适用于物联网场景的低延迟和低带宽连接。
    • Kafka适用于大数据量、高吞吐的场景,例如实时日记、点击流等。

总体来说:


  • MQTT适用于IoT边缘接入场景,Kafka更强大进行大数据实时处理。
  • MQTT单点,Kafka支持分布式。
  • Kafka消息持久化,可追溯;MQTT不支持存储。
MQTT和Kafka适合的场景



  • IoT场景下,MQTT更适用于装备到云端的低延时数据上报,像温湿度传感器这类。Kafka更适用于需求较高的场景,如视频云。
  • 利用Kafka来处理和分析实时数据更好,它支持持久化和横向扩展本领强。MQTT不适合大规模数据处理。
  • 日记分析Kafka和Elasticsearch都很好,Kafka用于高吞吐预处理,Elasticsearch用于搜索和分析。
  • 物流追踪这样低延迟的场景MQTT充足,不需要Kafka的高性能。
  • 服务间通讯可以利用Kafka,但性能考虑最好照旧用专用MQ。
  • 推送利用MQTT订阅更高效可靠。
  • Crowdfunding实时更新可以用Kafka做变乱传播与处理。
  • 视频直播可以用Kafka转发流数据,用MQTT实现弹幕交互。
总体来说,MQTT更适用于物联网即时陈诉,Kafka更适用于大数据实时计算。两个都很强大,选择要根据现实场景需求进行衡量。具体实施也可以结合两者各自优点,如Kafka处理大数据,MQTT边缘物联网连接

   相干文章:
(一)MQTT协议与指令下发;MQTT与Kafka比较
(二)用MQTT在Spring Boot项目中实现异步消息通信

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

反转基因福娃

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表