教你轻松理解MQTT(1)——概述

数字映月使
• 阅读 776

引言

看到MQTT,你可能认为是“MQ Telemetry Transport”的缩写。 这个说法放在以前可能是对的,但现在就有待商榷了。目前的MQTT不是任何单词的缩写,就单指MQTT。请注意,MQ也不是首字母缩写词,而是IBM旗下一产品的名称,并不代表“Message Queue”。

背后的原因是该协议的应用已经不限于遥测传输。MQTT现在已经将目光放在了整个物联网领域。在成为物联网通信领域黄金标准的道路上,MQTT正吸引着全球越来越多用户的关注。然而,目前只有少数在线资源可以为我们提供该协议的完整指南,这也是作者撰写本系列文章的目的——为任何想深入了解IoT星球的人提供MQTT的详细介绍:

1. 概述

2. Pub/Sub的工作原理

3. 保证QoS

4. 将MQTT连接到Kafka

5. 使用MQTT与真实设备进行交互

本文是MQTT简介系列的第一篇。通过本文,我们将快速浏览MQTT的一些基本术语。

MQTT工作原理简介

假设有如下设置:

发布者:我们房间里的一支温度计,发布带有“room1”标签的“温度”话题。

订阅者:我们房间里的一台笔记本电脑,订阅带有标签“room1”的“温度”话题。

中间人:在我们房间的服务器上运行。

话题:“温度”。

在“温度”话题下标记:“room1”。

温度消息的完整路径是:

  1. 温度计向中间人发布话题“温度”和标签“room1”的温度消息。
  2. 中间人检查谁订阅了话题和标签,然后将消息路由到笔记本电脑。
  3. 笔记本电脑收到消息。

Pub/Sub

在典型的客户端 - 服务器模式下,客户端和服务器需要相互了解,是强耦合系统示例。可问题是,服务器本身需要维护客户端注册表,这使得它变得复杂、容易出错并且不知何故会出现单点故障。

MQTT则使用Pub/Sub模式来解耦这个系统。

高级架构由三个组件组成:发布者——中间人——订阅者。发布者发布话题,订阅者订阅话题,而中间人则介于两者之间,主要负责过滤消息并确保订阅者只得到它想要的消息。我们也称MQTT中间人的发布者和订阅者为“客户”,表示他们都是中间人的客户; 因此,在此定义中,“服务器”是中间人。
中间人通过话题和话题下的标签过滤消息。话题是可用于对消息进行分组的“类型”或“类”,标签是话题的“子类型”或“子类”。 一旦发布者在话题和/或标签下向中间人发布消息,只有订阅相同话题和/或标签的订阅者才能从中间人获取消息。在这种情况下,发布者和订阅者都需要知道他们正在处理的话题和/或标签。

消息队列

MQTT可以被视为完全为物联网消息传递量身定制的消息队列。与Kafka等分布式系统中的传统消息队列系统相比,MQTT在空间和时间上都具有轻量级和更快速的特点。 MQTT更倾向于使用内存来存储吞吐量非常低的消息,并要求任何实现都支持动态添加/删除话题,以实现超低延迟和高灵活性。

你始终可以将MQTT与其他消息队列(如 Kafka)连接起来使用。

服务质量 (QoS)

顾名思义,QoS定义了中间人为客户(发布者和订阅者)服务的工作质量。客户端在与中间人通信时需要告诉中间人QoS的级别。

QoS共有3个级别:

0,或“最多一次”——消息可以传递,也可不传递,但不应有重复:

— 发布者的消息应该传递给中间人一次或零次;

— 订阅者将从中间人那里收到消息一次或零次;

1,或“至少一次”——必须传递消息,但可以重复:

— 发布者的消息应该传递给中间人一次或多次;

— 订阅者将从中间人那里收到一次或多次消息;

2,或“刚好一次”——必须传递消息,并且只能传递一次:

— 发布者的消息必须传递给中间人一次;

— 订阅者必须从中间人那里获得一次消息。


一个小广告:我最近一直在做的事
我最近开发了一个名为Shifu的开源物联网开发框架,我很想听听您的意见。
Shifu是一个高度可扩展的框架,允许开发人员轻松控制物联网设备。Shifu通过CRD来扩展Kubernetes的功能,允许开发人员访问物联网设备的全部功能,甚至可以编写设备本身不具备的新功能。这简化了传统物联网应用程序的开发,大大提高了物联网应用程序的效率、质量和可重用性。*

欢迎大家登录https://github.com/Edgenesis/...,告诉我你的想法!

本文由边无际授权发布
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java mqtt
代码:packagecc.gongchang.mqtt;importjava.net.URISyntaxException;importorg.fusesource.hawtdispatch.Dispatch;importorg.fusesource.mqtt.client.Future;
Stella981 Stella981
3年前
STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(一)
STM32ESP8266MQTT协议连接中国移动OneNet服务器上传接收数据(一)之前写过一篇通过自己的服务器来搭建MQTT的服务器的博客,但是我相信不是所有人都有自己的服务器,毕竟服务器是要钱的啊😨,没有服务器没关系,我们今天来看一下可以免费使用,且
Easter79 Easter79
3年前
STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(一)
STM32ESP8266MQTT协议连接中国移动OneNet服务器上传接收数据(一)之前写过一篇通过自己的服务器来搭建MQTT的服务器的博客,但是我相信不是所有人都有自己的服务器,毕竟服务器是要钱的啊😨,没有服务器没关系,我们今天来看一下可以免费使用,且
Wesley13 Wesley13
3年前
activeMQ+MQTT实现点对点发送消息
问题的提出:最近在做若干安卓设备(共享项目使用的硬件)和服务器通信实现MQTT消息的的接收。由于MQTT的限制(注意:不管你用的是paho的库还是其他任何MQTT的库都一样,这是MQTT协议的限制。)而无法实现服务器只给某一台机器(根据机器的IMEI号)发送消息。一开始使用的方法,就是服务器只管群发(消息体里会带一个终端ID字段信息),安卓端收到消息后,
Wesley13 Wesley13
3年前
MQTT实战之MQTT入门
MQTT入门介绍(一)一.MQTT简述MQTT(MessageQueuingTelemetryTransport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在
Wesley13 Wesley13
3年前
Java使用easymqtt4j快速开发工业级mqtt企业级应用
Java使用easymqtt4j快速开发工业级mqtt企业级应用easymqtt4j,nettymqttsubscriberpublisherbrokerclusterserverforjavaeasymqtt4j特点:1、springintegration集成模式,自由灵活。2、完全支持mqtt3.1、3.
Wesley13 Wesley13
3年前
MQTT初始篇笔记整理
MQTT简介MQTT(MessageQueuingTelemetryTransport,消息队列遥测传输),基于TCP/IP协议栈而构建,虽然叫消息队列遥测传输,但是她与消息队列毫无关系,她是一个IBM开发的客户端服务端架构的发布/订阅模式的消息传输协议;她的设计思想是轻巧、开放、简单、规范、易于实现,因此MQTT比较
Stella981 Stella981
3年前
MQTT消息协议、服务器及其客户端
    MQTT是一个轻量级的消息协议。从2014年12月IOIT大会上得到的消息,该协议已经被OASIS标准组织接收,成立了专门的工作组,以意味着该规范正式走向了标准化之路。    目前MQTT的标准组织官网:http://www.mqtt.org(https://www.oschina.net/action/GoToLink?urlhttp%3
Wesley13 Wesley13
3年前
MQTT 折腾笔记
导言第一次听说MQTT这玩意是由于要找个做手机推送的方案,后来发现,JPush这家伙做的实在不错,然后就不折腾了,最近,忽然心血来潮,把MQTT协议(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fpublic.dhe.ibm.com%2Fsoftware%2Fdw%2Fw
GeorgeGcs GeorgeGcs
2个月前
【HarmonyOS 5】鸿蒙中如何使用MQTT
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、MQTT是什么?MQTT(MessageQueuingTelemetryTransport,消息队列遥测传输)是一种轻量级、基于发布/订阅(Publish/Subscribe)模式的即