MQTT—发布和预订消息传递传输协议

原创
物联网 物联网应用 开发工具
IBM Watson物联网平台与设备和应用程序的通讯主要依靠MQTT协议,其是一种发布和预订消息传递传输协议,用于在传感器和移动设备之间高效交换实时数据。

【51CTO.com原创稿件】物联网生态体系四大领域对应不同的厂商,分别为设备制造、物联网平台、应用和业务。IBM凭借Watson强大人工智能入住中国物联网领域,IBM Watson物联网平台的落地,将会给中国物联网行业注入新鲜的血液。IBM Watson物联网平台与设备和应用程序的通讯主要依靠MQTT协议。关于MQTT(Message Queuing Telemetry Transport)要追溯到1999年,由IBM公司Andy Stanford-Clark博士和Arcom公司ArlenNipper博士发明,2014年,MQTT正式成为推荐的物联网传输协议标准。

MQTT 是一种发布和预订消息传递传输协议,用于在传感器和移动设备之间高效交换实时数据。MQTT 通过 TCP/IP 运行,并且在可以直接对 TCP/IP 编码时,还可选择使用库来处理 MQTT 协议的详细信息。提供了范围非常广泛的各种 MQTT 客户机库。

版本支持

Watson IoT Platform 支持以下 MQTT 消息传递协议版本:

Watson IoT Platform 支持 MQTT 标准允许的任何内容。MQTT 独立于数据,因此无法发送图像、任何编码的文本、加密数据以及几乎每种类型的二进制格式数据。

应用程序、设备和网关客户机

在 Watson IoT Platform 中,主要对象类为设备和应用程序。网关是设备的子类。MQTT 客户机向服务标识其自身的对象类用于在处于连接状态时确定客户机的功能。对象类还确定客户机认证的机制。

应用程序和设备还可用于不同的 MQTT 主题空间。设备在限定了设备的主题空间中运行,而应用程序对整个组织的主题空间具有完全访问权。

服务质量级别

MQTT 协议为客户机和服务器之间的消息传递提供了三种服务质量:“最多一次”、“至少一次”和“恰好一次”。虽然可使用任何服务质量级别发送事件和命令,但必须仔细考虑哪个合适的服务级别满足您的需求。服务质量级别 2 选项并不总是优于级别 0。

最多一次 (QoS0)

“最多一次”服务质量级别 (QoS0) 是最快的传输方式,有时称为“触发并忘记”。消息将最多传递一次,或者可能完全不会传递。网络中的传递不会得到确认,并且不会存储消息。如果客户机断开连接或者服务器发生故障,那么消息可能会丢失。

MQTT 协议不需要服务器将服务质量级别为 0 的发布内容转发到客户机。如果客户机在服务器收到发布内容时断开连接,根据服务器实施,可能会废弃此发布内容。

提示:以某个时间间隔发送实时数据时,请使用服务质量级别 0。丢失单条消息实际上不会产生很大影响,因为之后很快将发送包含较新数据的另一条消息。在此场景中,使用较高服务质量会带来额外成本,却不会获得任何实际优势。

至少一次 (QoS1)

使用服务质量级别 1 (QoS1),消息会始终至少传递一次。如果发送者收到应答之前消息传递失败,那么一条消息可能会传递多次。该消息必须存储在发送者本地,直到发送者收到关于接收者已发布此消息的确认为止。存储此消息是为了以防必须再次发送此消息。

恰好一次 (QoS2)

“恰好一次”服务质量级别 (QoS2) 是最安全也是最慢的传输方式。消息始终传递恰好一次,并且必须存储在发送者本地,直到发送者收到关于接收者已发布此消息的确认为止。存储此消息是为了以防必须再次发送此消息。使用服务质量级别 2,会采用比级别 1 更复杂的握手和应答序列,以确保消息不会重复。

提示:发送命令时,如果需要确认将仅执行指定命令且仅执行一次,请使用服务质量级别 2。此示例说明了级别 2 产生的额外开销比其他级别更为有利的情况。

预订缓冲区和 clean session

将为来自设备或应用程序的每个预订分配一个可容纳 5000 条消息的缓冲区。使用缓冲区,任何应用程序或设备可滞后于其正在处理的实时数据,还可为其做出的每个预订积压最多 5000 条暂挂消息。缓冲区已满时,会在收到新消息时废弃最旧消息。

使用 MQTT clean session 选项可访问预订缓冲区。当 clean session 设置为 false 时,订户会收到来自缓冲区的消息。当 clean session 设置为 true 时,会重置缓冲区。

注:无论使用什么服务质量设置,预订缓冲区限制都适用。如果应用程序无法与其做出的预订的消息速率保持同步,以级别 1 或 2 发送的消息有可能无法传递到该应用程序。

消息有效内容限制

Watson IoT Platform 支持发送和接收 MQTT 标准允许的任何格式的消息。MQTT 独立于数据,因此无法发送图像、任何编码的文本、加密数据以及几乎每种类型的二进制格式数据。但是,对于特定用例,存在一些限制。

对于 Watson IoT Platform 上的消息有效内容,也存在大小限制。

消息有效内容格式限制

消息有效内容可包含任何有效字符串,但是,JSON(“json”)、文本(“text”)和二进制(“bin”)格式比其他格式类型更常用。

下表概述了不同格式类型的消息有效内容限制:

***消息有效内容大小

重要信息:Watson IoT Platform 上的***有效内容大小为 131072 字节。将拒绝其有效内容超出限制的消息。正在连接的客户机也会断开连接,并且会在诊断日志中显示一条消息,如以下设备消息示例中所示:

Closed connection from x.x.x.x. The message size is too large for this endpoint.

【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】

 

责任编辑:王雪燕 来源: 51CTO
相关推荐

2023-09-24 23:18:50

2010-07-14 17:16:35

SOAP协议

2022-07-19 20:33:38

MQTT阿里云IoT服务

2022-05-23 09:30:00

MQTT车联网QoS

2020-11-17 08:59:28

MQTT

2017-02-15 09:25:36

iOS开发MQTT

2020-11-17 12:15:36

MQTT开发

2023-03-20 16:16:40

MQTT传输协议

2012-05-11 10:42:56

JavaErrai

2023-01-04 07:39:39

2022-09-26 11:30:40

MQTT协议客户端协议

2023-08-25 09:17:38

2023-05-17 08:16:04

RabbitMQ消息传递

2011-08-24 11:25:55

LMTPSMTP

2013-05-27 10:48:16

TCPUDP传输协议

2010-06-13 15:32:57

TCP协议

2019-05-28 05:07:11

物联网联网汽车MQTT

2013-04-28 10:29:07

MQTT物联网消息队列遥测传输

2023-11-09 15:28:32

Spring开发

2023-12-04 08:24:23

点赞
收藏

51CTO技术栈公众号