MQTT 的核心组件是什么?

MQTT Broker 规则引擎入门:快速指南 MQTT是基于TCP/IP协议栈的应用层协议,它采用发布/订阅模式,允许多个客户端(设备或应用程序)通过一个中间服务器(即MQTT Broker)进行通信。客户端可以向Broker发布消息到特定的主题(Topic),也可以订阅感兴趣的主题,以便接收来自其他客户端发布到该主题的消息。规则引擎是一种基于规则的系统,它能够根据预先定义的规则对输入数据进行处理。在MQTT的场景中,规则引擎可以对MQTT消息进行过滤、转换、聚合等操作,并根据规则触发相应的动作,如将消息转发到另一个主题、存储到数据库或调用外部API。 阅读详情

MQTT 的核心架构非常简洁,主要由 三个基本组件 构成。为了方便理解,我们继续使用“邮局系统”这个比喻。


MQTT 三大核心组件

  1. 代理 (Broker)
  2. 客户端 (Client)
  3. 主题 (Topic)

1. 代理 (Broker)

  • 比喻:邮局中心

代理是 MQTT 系统的心脏和中枢神经。它是一个服务器软件,负责接收所有来自客户端的消息,并根据规则将这些消息准确地分发给相应的订阅者。所有的客户端都只与 Broker 通信,客户端之间从不直接连接。

核心职责:

  • 接收连接:接受来自客户端的网络连接请求。
  • 身份验证与授权:验证客户端的身份(用户名/密码、证书等),并确认它们是否有权限发布或订阅特定主题。
  • 接收消息:接收来自发布者客户端的消息。
  • 处理订阅:管理所有客户端的订阅请求,维护一个“谁订阅了什么主题”的列表。
  • 路由消息:这是 Broker 最核心的功能。当它收到一条消息时,会立即查找订阅了该消息主题的客户端列表,并将消息转发给所有匹配的客户端。
  • 会话管理:管理客户端的会话状态,包括处理持久会话、离线消息、遗嘱(Last Will)消息和保留消息(Retained Messages)。

常见 Broker 软件: Eclipse Mosquitto (轻量级,非常适合入门和中小型项目), EMQX (功能强大,高并发,专为企业级和大规模物联网平台设计), HiveMQ 等。

2. 客户端 (Client)

  • 比喻:邮局的顾客(既可以是寄信人,也可以是收信人)

客户端可以是任何连接到 Broker 的设备或应用程序。它可以是嵌入式设备上的一个传感器,也可以是手机上的一个 App,或是一个后端服务。

一个客户端可以扮演两种角色,并且可以同时是发布者和订阅者。

A. 发布者 (Publisher)
  • 角色:寄信人。
  • 职责:
    1. 与 Broker 建立连接。
    2. 将包含数据的消息发布到一个指定的主题上。
    • 发布者完成发布后,它的任务就结束了。它不关心谁会收到这个消息,也不需要知道是否有任何订阅者存在。
B. 订阅者 (Subscriber)
  • 角色:收信人。
  • 职责:
    1. 与 Broker 建立连接。
    2. 向 Broker 发送一个或多个订阅请求,告诉 Broker 它对哪些主题感兴趣。
    3. 等待并接收来自 Broker 的消息。
    • 订阅者只关心它感兴趣的主题,它不关心消息是哪个发布者发送的。

3. 主题 (Topic)

  • 比喻:信件上的地址 或 杂志的频道名称

主题不是一个物理组件,而是一个消息标签或通信渠道。它是一个 UTF-8 编码的字符串,用于让 Broker 对消息进行分类和路由。

核心特性:

  • 层级结构 (Hierarchical):主题由一个或多个层级组成,层级之间用斜杠 / 分隔,非常像文件系统的路径。

    • 例如:smart_home/living_room/temperature
    • 这个结构使得主题管理非常灵活和有条理。
  • 消息过滤的核心:Broker 正是利用主题来决定将消息发送给哪些订阅者。

  • 支持通配符 (Wildcards):这是主题非常强大的一个特性,允许订阅者一次性订阅多个匹配的主题。

    • 单层通配符 +:匹配单个层级。
      • 订阅 smart_home/+/temperature 可以收到来自 smart_home/living_room/temperature 和 smart_home/bedroom/temperature 的消息,但收不到 smart_home/garage/light/status 的消息。
    • 多层通配符 #:匹配任意数量的层级(必须在主题的末尾)。
      • 订阅 smart_home/# 可以收到 smart_home 下所有子主题的消息,包括 smart_home/living_room/temperature 和 smart_home/garage/light/status。

工作流程示例

让我们把这三个组件串起来,看看一个完整的通信流程:

  1. 准备阶段:

    • 一个客户端 A(例如,一个手机 App)连接到 Broker,并订阅了主题 home/light/status。
    • 一个客户端 B(例如,一个智能灯泡)也连接到 Broker。
  2. 发布消息:

    • 客户端 B (发布者) 的状态发生了改变(比如灯被打开了)。
    • 它向 Broker 发布一条消息,消息的主题是 home/light/status,消息的内容 (Payload) 是 "ON"。
  3. Broker 路由:

    • Broker 接收到这条消息。
    • 它检查自己的订阅列表,发现客户端 A 订阅了 home/light/status 这个主题。
  4. 接收消息:

    • Broker 立即将消息 ("ON") 转发给客户端 A。
    • 客户端 A (订阅者) 收到消息,并在界面上显示“灯已打开”。

总结

这三个组件——代理 (Broker)、客户端 (Client) 和 主题 (Topic)——协同工作,构成了 MQTT 协议强大而灵活的通信基础。理解它们各自的角色以及它们之间的交互方式,是掌握 MQTT 的关键。

【MQTT】MQTT入门与进阶系列(一)—— MQTT 基础知识介绍和示例 本篇文章主要介绍MQTT入门基础知识,什么是MQTT、MQTT的特点、MQTT客户端、MQTT Broker、发布-订阅模式、主题、QoS,以及通过一个示例,进行订阅和发布消息,让读者对MQTT的工作原理和工作流程有个直观的了解和感受。就像一盘菜,学习如何炒这盘菜之前,咱们先知道这盘菜的原料,尝尝这盘菜的味道。 阅读详情

相关推荐

MQTT 服务器(broker)

EMQ X是一个基于Erlang语言的开源mqtt服务器,目前来看是开源的最好的mqtt服务器,也是国内开源的mqtt服务器,优点是功能全面,文档齐全,社区活跃,有很好的支持,缺点是因为erlang语言,对于其他语言的开发者自己扩展有一定难度。EMQ X 是一款完全开源,高度可伸缩,高可用的分布式 MQTT 消息服务器,适用于 IoT、M2M 和移动应用程序,可处理千万级别的并发客户端。

草上爬的博客 1万+

MQTT 服务器介绍

MQTT 发布订阅模式简述 MQTT 是基于 发布(Publish)/订阅(Subscribe) 模式来进行通信及数据交换的,与 HTTP 的 请求(Request)/应答(Response) 的模式有本质的不同。 订阅者(Subscriber) 会向 消息服务器(Broker) 订阅一个 主题(Topic) 。成功订阅后,消息服务器会将该主题下的消息转发给所有的订阅者。 主题(Topic)以 ‘...

emqx_broker的博客 8901

构建你的智能家居消息中枢:用 C++11 和 paho-mqtt-cpp 实现 MQTT 消息总线

本文介绍了如何使用C++11和paho-mqtt-cpp库构建智能家居MQTT消息总线系统。系统采用事件驱动架构实现模块解耦,通过统一的Event事件结构体和EventBus抽象接口,支持多种通信后端。重点展示了MQTT后端的实现细节,包括连接管理、消息发布/订阅机制和线程安全处理。该系统具有高扩展性,可方便集成新模块和通信协议,为智能家居系统提供高效可靠的消息中枢。文中提供了完整代码示例和项目结构,涵盖事件类型定义、接口设计和实际应用场景。

向前走走吧 2306

mqtt的Broker与Client使用说明

【代码】mqtt的Broker与Client使用说明。

LB33333的博客 4101

OCCT(Open CASCADE Technology)入门-2.搭建开发环境

安装完成后,在【扩展】菜单下会看到【Qt VS Tools】菜单,打开子菜单【options】进入qt配置窗口。打开VS后随便创建一个新项目,进入开发环境主页,打开顶部菜单【扩展】->【管理扩展】打开管理扩展窗口。然后点击右下角【创建】,一路【next】即可,最后会进入到开发主界面,得到一个下面的工程结构。好了,到这里基本的环境我们已经安装好了,下面我们开始创建项目并配置开发环境。打开顶部菜单【项目】,点击最后一个菜单项【xxx属性】,进入项目配置界面。这里的配置一般不用改,我们看【Versions】

2501_91235145的博客 2875

微信支付开发之平台给用户转账到零钱的功能

请求消息中应包含商家批次单号、转账名称、appid、转账总金额、转账总笔数、转账openid、收款用户姓名等信息。批次已受理成功,若发起批量转账的30分钟后,转账批次单仍处于该状态,可能原因是商户账户余额不足等。【转账场景ID】 该批次转账使用的转账场景,如不填写则使用商家的默认场景,如无默认场景可为空,可前往“商家转账到零钱-前往功能”中申请。【转账总笔数】 一个转账批次单最多发起一千笔转账。【商家批次单号】 商户系统内部的商家批次单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一。

程序员weixin_sodomany的博客 3450

MQTT性能压测实践(一)MQTT Broker知识点总结

MQTT性能压测需要了解的必要前提,了解MQTT的架构设计,才能知彼知己、百战不殆

tech_otaku0512的博客 4055

96.在 Vue 3 中使用 OpenLayers 探究加载 Point、Polygon 的极限

在前端 GIS(地理信息系统)开发中,OpenLayers 作为一个功能强大的 Web 地图库,广泛用于加载地图、渲染矢量数据(点、线、面)、叠加图层等场景。然而,当涉及到。

小彭的博客 1155

zigbee2mqtt核心组件剖析:Controller模块的架构与源码解读

在智能家居生态系统中,Zigbee设备与MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)协议之间的无缝对接是构建开放、可扩展智能家居平台的关键。zigbee2mqtt作为这一领域的明星项目,其Controller模块承担着整个系统的核心调度职责。本文将深入剖析Controller模块的架构设计、源码实现及其在系统中的作用。 ## Control...

gitblog_00540的博客 753

【一 扣子客户案例合集】【 1.3 识典古籍基于扣子智能助手的古籍数字化全流程技术解析】

古籍数字化智能处理系统全流程解析 本文详细介绍了基于扣子智能助手的古籍数字化解决方案,核心技术包括: 多层级架构设计:采用"云-边-端"三层次架构,整合高精度扫描设备与AI处理模块,实现从物理古籍到结构化数据的全流程自动化。 智能图像处理:通过12道预处理工序(包括畸变校正、污渍去除和对比度增强)处理古籍图像,采用改进的EAST算法和ViT模型实现高精度文字检测与识别,准确率达98.7%。 NLP增强处理:结合Transformer-XL预训练模型和N-gram语言模型进行文本校正,基于

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 1441

YOLOv8自动驾驶系统 —— 夜间低光照条件 详细说明和完整代码

本文提出一种针对夜间低光照优化的自动驾驶车道保持系统方案,基于YOLOv8模型改进,包含三大核心技术:1.采用Retinex理论的多尺度低光增强算法,结合自适应伽马校正;2.改进YOLOv8的车道检测模型,通过夜间专用数据集训练,增加抗眩光处理;3.多传感器融合框架,整合可见光与红外图像。系统实现动态逆透视变换和参数调整,在Jetson Orin硬件上达到30ms级实时性能。测试显示在无照明、眩光干扰等极端场景下保持稳定,代码已开源。扩展方向包括V2X协同定位和自适应大灯联动控制。

u010117029的博客 598

esp_mqtt:构建物联网系统的核心组件

esp_mqtt:构建物联网系统的核心组件 项目介绍 esp_mqtt 项目是一个开源的MQTT代理和客户端,专为ESP8266设计,支持脚本功能。通过此项目,ESP8266可以作为小型分布式物联网系统的中心节点。它实现了MQTT代理和一个简单的脚本规则引擎,通过事件/动作语句将MQTT传感器和执行器链接在一起。它既可以作为STA(Station模式),也可以作为AP(Access Point模式...

gitblog_00883的博客 486

MNI152 坐标空间和 fsaverage 坐标空间相互转换, 如已知fsaverage空间的坐标如何求MNI152 坐标?aparc.a2009s.annot转化到MNI152空间?

大多数神经影像学研究的结果是在体积(例如,MNI152)或表面(例如,fsaverage)坐标系中报告的。体积坐标系和表面坐标系之间的准确映射可以促进许多应用,例如将 fMRI 组分析从 MNI152 投影到 fsaverage 以进行可视化或从 fsaverage 投影静息状态 fMRI 分区对 MNI152进行新数据的体积分析。Wu et al., 2018 评估了三种在 MNI152通过模拟上述应用的 Colin27 和 fsaverage 坐标系:将组平均数据从 MNI152/Colin27 投影到

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 2966

开发者必看:mqtt-operator基于Kubebuilder的实现原理与核心组件剖析

前往项目官网免费下载:[https://ar.openeuler.org/ar/](https://ar.openeuler.org/ar/?utm_source=csdn_blog) MQTT-Operator是openEuler社区推出的一个专为Kubernetes设计的MQTT服务管理工具,它基于Kubebuilder框架构建,能够高效管理MQTT服务实例在Kubernetes集群中的部署

gitblog_06861的博客 132

【Linux0.11代码分析】之 系列文章链接汇总(全)

【Linux0.11代码分析】00 之 系列文章链接汇总(全)

|~~~热爱生活、努力学习的小伙汁~~~| 1449

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

amazon-freertos核心组件完全指南:MQTT、HTTP、BLE全解析

amazon-freertos是一款专为嵌入式设备设计的实时操作系统,提供了丰富的核心组件,包括MQTT、HTTP和BLE等,帮助开发者快速构建物联网应用。本文将详细解析这些核心组件的功能、架构和使用方法,带你轻松掌握amazon-freertos的精髓。 ## 一、MQTT组件:高效可靠的消息传输 MQTT(Message Queuing Telemetry Transport)是一种轻量级

gitblog_00911的博客 1124

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Eclipse Paho MQTT嵌入式C客户端核心组件解析:从MQTTPacket到MQTTClient

Eclipse Paho MQTT嵌入式C客户端是一款轻量级MQTT客户端库,专为嵌入式系统和资源受限环境设计,支持多种操作系统和编程语言,提供质量服务、订阅过滤器等高级功能。本文将深入解析其两大核心组件MQTTPacket与MQTTClient,帮助开发者快速掌握嵌入式MQTT通信的实现原理。 ## MQTTPacket:MQTT协议的底层基石 ### 核心功能与数据结构 MQTTPack

gitblog_00009的博客 1041

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

一款高性能的Java物联网通信组件Mica-MQTT

Mica-MQTT 是一款基于Java AIO实现的低延迟、高性能的MQTT物联网开源组件,支持MQTT v3.1/v3.1.1/v5.0协议,提供客户端和服务端实现,广泛应用于物联网云端Broker、边缘计算、消息推送等场景。

xuweilin的博客 1770

ESP8266_RTOS_SDK核心组件深度解析:Wi-Fi、TCP/IP、MQTT一体化方案

ESP8266_RTOS_SDK是基于FreeRTOS的ESP8266最新开发框架,采用esp-idf风格设计,为物联网开发提供了Wi-Fi、TCP/IP协议栈和MQTT通信的完整解决方案。本文将深入剖析这些核心组件的架构设计与应用方法,帮助开发者快速构建稳定可靠的物联网设备。 ## 📌 开发板功能概览:ESP8266硬件基础 ESP8266开发板是实现物联网功能的硬件载体,其核心模块包括E

gitblog_00276的博客 847

Mosquitto-1.6.9安装包:开源MQTT代理助力物联网应用

Mosquitto-1.6.9安装包:开源MQTT代理助力物联网应用 去发现同类优质开源项目:https://gitcode.com/ 随着物联网技术的迅速发展,MQTT协议作为一种轻量级的、基于发布/订阅模式的消息传输协议,在物联网应用中扮演了关键角色。今天,我们要推荐的正是这样一个优秀的开源MQTT代理——Mosquitto-1.6.9安装包。 项目介绍 Mosquitto是一个开源的MQTT...

gitblog_06778的博客 774

Linux下学习用C语言实现MQTT(二)(常用函数介绍)

介绍一下常用的MQTT的C函数。MQTT系列函数有很多,在paho-mqtt.c库中的src路径下有大量函数的定义和声明,这里只介绍比较常用的函数解耦提和结构体: 1.结构体MQTTClient 定义:typedef void* MQTTClient; 含义:代表MQTT客户端的句柄,成功调用MQTTClient_create函数后会得到有效的客户端句柄。 (这里可以做一个对比,我并不是很了解这种...

qq_1711318490的博客 5837

【C/C++】MQTT

MQTT 学习笔记

YZJincsdn的博客 1546

【亲测免费】 探索高性能MQTT客户端:netty-mqtt-client

探索高性能MQTT客户端:netty-mqtt-client 项目介绍 netty-mqtt-client 是一个基于Netty框架实现的MQTT协议客户端,旨在为开发者提供一个高效、灵活且易于扩展的MQTT客户端解决方案。该项目不仅适用于学习和研究MQTT协议及Netty框架,还能在实际项目中发挥重要作用。通过该客户端,开发者可以轻松实现与MQTT Broker的连接、消息发布、订阅及处理等功能...

gitblog_00257的博客 1061

MQTT一些最基础知识(简单了解MQTT)

MQTT协议是物联网消息传递的事实标准,是一种轻量级、基于发布 - 订阅模式的消息传输协议。MQTT 发布/订阅协议由 OASIS 和 ISO 标准化,提供了一种可扩展且可靠的方式来通过互联网连接设备。专为低带宽、高延迟、不稳定网络环境设计(如物联网、移动设备场景)。如今,许多公司使用 MQTT 将数百万台设备连接到互联网。

2401_86618173的博客 759

【计算机网络通信 MQTT 】MQTT代理:原理、作用与实现

MQTT代理是MQTT通信架构中的核心组件,它负责接收、存储和转发消息。它确保消息从发布者正确地传递到订阅者,支持解耦和异步通信。MQTT代理可以是运行在一台计算机上的软件服务,也可以是一个分布式系统,甚至可以是云平台上的托管服务。选择合适的MQTT代理实现和部署方式,取决于你的具体需求和应用场景。

一起学习进步! 1288
上一篇: AOP 在 Spring 框架中的实际应用有哪些?
下一篇: Spring 的声明式事务 (@Transactional) 是如何通过 AOP 实现的?
冰糖心书房
博客等级 码龄15年 6016粉丝 690原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰糖心书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值