资讯专栏INFORMATION COLUMN

MQTT

lastSeries / 3390人阅读

摘要:协议版本介绍互联网的基础网络协议是协议消息队列遥测传输是基于协议栈而构建的已成为通信的标准为什么选择有多好多好多么牛逼我就不说了说的再多不如一个一个试试完了做比对剩下的那个就是要选择的实在不想这样搞技术就跟着一线走发布和订阅模型协议在网络中

mqtt 协议版本: 3.1.1
MQTT 介绍

互联网的基础网络协议是 TCP/IP协议.

MQTT(消息队列遥测传输)是基于 TCP/IP 协议栈而构建的, 已成为 IoT 通信的标准.

为什么选择 MQTT

MQTT 有多好多好, 多么牛逼我就不说了. 说的再多不如一个一个试, 试完了做比对, 剩下的那个就是要选择的.

实在不想这样搞, 技术就跟着一线走.

发布和订阅模型

MQTT 协议在网络中定义了两种实体类型: 一个消息代理和一些客户端.

代理是一个服务器, 它从客户端接收所有消息, 然后将这些消息路由到相关的目标客户端. 客户端就是能够与代理交互来发送和接收消息的.

客户端连接到代理. 它可以订阅代理中的任何消息 “主题”. 此连接可以是简单的 TCP/IP 连接, 也可以是用于发送敏感消息的加密 TLS 连接.

客户端通过将消息和主题发送给代理, 代理然后将消息转发给所有订阅该主题的客户端.

因为 MQTT 消息是按主题进行组织的, 所以应用程序开发人员能灵活地指定某些客户端只能与某些消息交互.

上图我们有两个主题分别是 config_change device_data.

设备将在 device_data 主题上发布设备数据, 经过 Broker 发送给所有订阅者接收(这里的订阅者是数据处理和存储).

而我们的设备控制器将命令发布到 config_change 主题, 经过 Broker 发送给所有订阅者接收(这里的订阅者是设备).

⚠️ Broker = 代理 = MQTT 服务器
MQTT Broker 选择

下面介绍几款MQTT服务器:

Apache-Apollo: 一个代理服务器, 在 ActiveMQ 基础上发展而来, 可以支持 STOMP、AMQP、MQTT、Openwire、SSL和WebSockets 等多种协议, 并且 Apollo 提供后台管理页面, 方便开发者管理和调试.

EMQ: 号称百万级开源MQTT消息服务器, 基于 Erlang/OTP 语言平台开发, 支持大规模连接和分布式集群, 发布订阅模式的开源MQTT消息服务器.

HiveMQ: 一个企业级的MQTT代理,主要用于企业和新兴的机器到机器M2M通讯和内部传输, 最大程度的满足可伸缩性、易管理和安全特性, 提供免费的个人版. HiveMQ提供了开源的插件开发包.

Mosquitto: 一款实现了消息推送协议MQTT v3.1的开源消息代理软件, 提供轻量级的、支持可发布/订阅的消息推送模式.

了解 MQTT 协议

更详细的协议介绍在这里

MQTT 是一种连接协议, 它指定了如何组织数据字节并通过 TCP/IP 网络传输它们. 但实际上, 开发人员并不需要了解这个连接协议.

所有 MQTT 库和工具都提供了直接处理这些消息的简单方法, 并能自动填充一些必需的字段, 比如消息和客户端 ID.

首先, 客户端发送一条 CONNECT 消息来连接代理. CONNECT 消息要求建立从客户端到代理的连接. CONNECT 消息包含以下内容参数.

表 1. CONNECT 消息参数

参数 说明
cleanSession 此标志指定连接是否是持久性的. 持久会话会将所有订阅和可能丢失的消息 (具体取决于 QoS) 都存储在代理中 (请参阅 表 3 获取 QoS 的描述)
username 代理的身份验证和授权凭证
password 代理的身份验证和授权凭证
lastWillTopic 连接意外中断时,代理会自动向某个主题发送一条 “last will” 消息.
lastWillQos “last will” 消息的 QoS. (请参阅 表 3 来查看 QoS 的描述)
lastWillMessage “last will” 消息本身
keepAlive 这是客户端通过 ping 代理来保持连接有效所需的时间间隔

客户端收到来自代理的一条 CONNACK 消息. CONNACK 消息包含以下内容参数.

表 2. CONNACK 消息参数

参数 说明
sessionPresent 此参数表明连接是否已有一个持久会话. 也就是说, 连接已订阅了主题, 而且会接收丢失的消息.
returnCode 0 表示成功. 其他值指出了失败的原因.

建立连接后, 客户端向代理发送一条或多条 SUBSCRIBE 消息, 表明它会从代理接收针对某些主题的消息. 如表 3.

表 3. SUBSCRIBE 消息参数

参数 说明
qos 表明此主题范围内的消息传送到客户端所需的一致程度. 值 0:不可靠, 消息基本上仅传送一次, 如果当时客户端不可用, 则会丢失该消息. 值 1:消息应传送至少 1 次. 值 2:消息仅传送一次.
topic 要订阅的主题. 一个主题可以有多个级别, 级别之间用斜杠字符分隔. 例如, “dw/demo” 和 “ibm/bluemix/mqtt” 是有效的主题.

客户端成功订阅某个主题后, 代理会返回一条 SUBACK 消息, 其中包含一个或多个 returnCode 参数.

表 4. SUBACK 消息参数

参数 说明
returnCode SUBCRIBE 命令中的每个主题都有一个返回代码. 值 0 - 2:成功达到相应的 QoS 级别. 值 128:失败.

与 SUBSCRIBE 消息对应, 客户端也可以通过 UNSUBSCRIBE 消息取消订阅一个或多个主题.

表 5. UNSUBSCRIBE 消息参数

参数 说明
topic 此参数可重复用于多个主题.

客户端可向代理发送 PUBLISH 消息. 该消息包含一个主题和数据. 代理将消息转发给所有订阅该主题的客户端.

表 6. PUBLISH 消息参数

参数 说明
topicName 发布消息的相关主题.
qos 消息传递的服务质量水平.
retainFlag 此标志表明代理是否保留该消息作为针对此主题的最后一条已知消息.
payload 消息中的实际数据. 它可以是文本字符串或二进制大对象数据.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72327.html

相关文章

  • ESP32学习笔记(46)——MQTT客户端

    摘要:一简介实现方式实现协议需要客户端和服务器端通讯完成,在通讯过程中,协议中有三种身份发布者代理服务器订阅者。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。 ...

    Jenny_Tong 评论0 收藏0
  • MQTT如何快速助你产品化

    摘要:时间就是金钱,效率就是生命本教程助力开发者使用协议快速产品化。摘要借助具备及联网功能的,快速部署到客户产品上,助力开发,缩短开发周期,快速实现产品商业化。 时间就是金钱,效率就是生命 本教程助力开发者使用MQTT协议快速产品化。 摘要 借助具备MQTT及联网功能的DTU,快速部署到客户产品...

    sutaking 评论0 收藏0
  • MQTT协议(1)-简介

    摘要:,消息队列遥测传输是开发的一个即时通讯协议,有可能成为物联网的重要组成部分。会发生消息丢失或重复。只有一次,确保消息到达一次。此外,国内很多企业都广泛使用作为手机客户端与服务器端推送消息的协议。 前几天写了一下MQTT协议实现推送数据传输,所以我会不定期的更新一下关注MQTT的知识。 MQTT: MQTT(Message Queuing Telemetry Transport,消息队列...

    objc94 评论0 收藏0
  • 基于MQTT的物联网云测量解决方案

    摘要:本文是其中的一个解决方案。地址客户端服务端前端网页介绍,消息队列遥测传输是开发的一个即时通讯协议,有可能成为物联网的重要组成部分。必须用于在顶层分隔符之后,除了当自己指定时。 1. 问题描述 最近,本实验室大量上马云测量,云监控方面的项目,大概是属于物联网应用的一个分支。老板也有将旧有仪器改造的想法,所以要实现仪器设备的云控制。本文是其中的一个解决方案。 2. 技术选型 消息队列:M...

    张金宝 评论0 收藏0
  • CountDownLatch + Callbale+FutureTask 实现异步变同步调用

    摘要:背景通过接口实现调用发送数据,接口返回值为发送数据的对应结果。接口为同步阻塞,为异步回调方式。接收数据回调接收到数据后,通过闭锁释放阻塞的线程,同时设置结果返回给调用者 背景 通过HTTP接口实现调用MQTT Client发送数据,HTTP接口返回值为MQTT Client发送数据的对应结果。 HTTP接口为同步阻塞,MQTT Client 为异步回调方式。如何实现在HTTP接口中调用...

    张金宝 评论0 收藏0

发表评论

0条评论

lastSeries

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<