当前位置: 首页 > news >正文

MQTT Broker存在的必要性

为什么需要 MQTT Broker?直接通信不行吗?

这是一个非常好的架构设计问题!让我用对比分析的方式帮你理解中间件的价值。

一、假设没有 Broker,直接通信会怎样?

1.1 方案对比

方案 A:直接通信(Client-to-Client) ┌─────────────────────┐ ┌─────────────────────┐ │ 远程驾驶控制节点 │ ◄────────────────► │ 视频推流节点 │ │ (Publisher) │ │ (Subscriber) │ └─────────────────────┘ └─────────────────────┘ 需要知道对方的 IP 地址和端口 需要处理连接管理、断线重连 需要定义通信协议
方案 B:通过 Broker 通信 ┌─────────────────────┐ ┌──────────────┐ ┌─────────────────────┐ │ 远程驾驶控制节点 │ ──► │ MQTT Broker │ ──► │ 视频推流节点 │ │ (Publisher) │ │ │ │ (Subscriber) │ └─────────────────────┘ └──────────────┘ └─────────────────────┘ 只需要知道 Broker 地址 消息路由中心 不需要知道对方存在

1.2 直接通信的问题

问题说明
点对点耦合控制节点必须知道视频节点的 IP/端口,一个节点变更影响另一个
无法扩展如果需要增加"状态监控节点"也想接收视频状态,必须修改控制节点代码
断线处理复杂需要自己实现心跳检测、断线重连、消息缓存
协议定义需要自己定义消息格式、序列化/反序列化
广播困难一条指令要发送给多个节点时,需要维护多个连接

二、Broker 的核心价值:解耦

2.1 什么是解耦?

没有解耦 (耦合): 控制节点 ──► 必须知道 ──► 视频节点的 IP/端口 │ │ │ 视频节点挂了? │ 视频节点换IP了? ▼ ▼ 控制节点必须处理 控制节点必须重新配置 有解耦 (通过 Broker): 控制节点 ──► 只知道 ──► Broker 地址 │ │ │ 视频节点挂了? │ 视频节点换IP了? ▼ ▼ 控制节点无感知 控制节点无感知

2.2 实际场景:远程驾驶系统

假设系统中有以下节点:

  • ① 远程驾驶控制节点(发送 start/stop 指令)
  • ② 视频推流节点(接收指令,推流到 RTSP)
  • ③ 状态监控节点(接收推流状态,展示给运维)
  • ④ 故障诊断节点(接收异常告警,记录日志)

如果没有 Broker:

控制节点 ── 指令 ──► 视频节点 控制节点 ── 指令 ──► 视频节点 (要维护连接) 视频节点 ── 状态 ──► 状态监控节点 视频节点 ── 状态 ──► 故障诊断节点 (要维护连接) 视频节点 ── 告警 ──► 故障诊断节点 视频节点 ── 告警 ──► 状态监控节点 (要维护连接) 每个节点都要知道其他所有节点的存在! 新增节点时,所有相关节点都要修改代码!

有了 Broker:

控制节点 ── 发布 /video_stream/cmd ──► Broker 视频节点 ── 订阅 /video_stream/cmd ◄── Broker 视频节点 ── 发布 /stream_status ──► Broker 状态监控 ── 订阅 /stream_status ◄── Broker 故障诊断 ── 订阅 /stream_status ◄── Broker 故障诊断 ── 订阅 /abnormal_status ◄── Broker 每个节点只关心自己的 Topic,互不干扰!

三、类比理解:快递系统

场景没有 Broker有 Broker
比喻你亲自把快递送到每个收件人通过快递公司(中转)
发送方需要知道每个收件人的地址只需要知道快递公司地址
接收方需要认识每个发件人只需要关注自己的收件箱
新增收件人通知所有发件人发件人无感知
失败处理亲自处理重发快递公司保证送达

四、MQTT Broker 提供的核心能力

4.1 消息路由

Publisher 发布到 Topic "A" │ ▼ Broker 查找订阅了 "A" 的所有 Subscribers │ ▼ 转发给所有订阅者

4.2 消息持久化

// 代码中的设置connOpts.set_clean_session(false);// 持久会话

作用: 如果视频节点暂时断线,Broker 会保留消息,节点重连后自动补发。

4.3 QoS 保障

mqtt_client_->subscribe("/video_stream/cmd",1);// QoS = 1
QoS 级别说明
0最多一次(Fire and Forget)
1至少一次(确保送达,适合控制指令)
2恰好一次(保证只送达一次)

4.4 过滤匹配

// 支持通配符subscribe("/vehicle/+/video_stream/#",1)// 可以匹配:// /vehicle/VIN001/video_stream/status// /vehicle/VIN002/video_stream/status// /vehicle/VIN001/video_stream/cmd

五、对比其他通信方案

方案优点缺点适用场景
MQTT轻量、Pub/Sub、QoS、持久化需要部署 Broker物联网、远程驾驶、消息型数据
ROS2 Topic实时性好、同机器高效仅限同机器、不跨语言机器人内部节点通信
HTTP REST通用、标准化同步阻塞、无推送Web API、配置下发
gRPC高性能、强类型复杂、无原生 Pub/Sub微服务间通信
直接 TCP灵活需要自己实现协议定制化场景

六、总结

问题答案
能直接通信吗?技术上可以,但会导致强耦合
为什么用 Broker?解耦可扩展可靠传输
Broker 的成本?需要额外部署一个服务(Mosquitto/EMQX)
带来的收益?新增节点无需修改现有代码、断线自动恢复、多播天然支持

一句话总结:Broker 是"消息邮局",让每个节点只需关心"往哪发"和"收什么",而不需要关心"谁收"和"谁发"。这种设计是大型分布式系统的基础模式。

http://www.jsqmd.com/news/1327311/

相关文章:

  • AI辅助英语阅读的黄金4.7秒法则(神经语言学验证+眼动追踪实验首发)
  • 【计算机毕业设计】基于大模型的游戏交易系统的设计与实现
  • 10人如何借助一台高配置工作站进行SolidWorks高效设计?
  • 2026年辽阳厨师考试机构 满足多元考证需求 推荐合规靠谱选项 - 滚动商讯
  • AI生成3D模型后怎么自动生成贴图?用V2Fun从基础纹理到可用材质
  • 2026 广州钻石回收哪家靠谱?易奢福到店核验当面估价 - 奢侈品回收实体店探店
  • 终极指南:Universal-Updater让3DS自制软件管理变得像玩游戏一样简单
  • 学术会议投稿与参会全流程详解:从选会到检索的完整指南 - RDLink研发家
  • 每日论文解读(8.3)2——AgentHPOBench:面向序列超参数优化的LLM Agent评估基准
  • 揭秘Transformer推理功耗黑洞:5个被99%团队忽略的能效优化关键节点
  • 2024Q2最新数据:已部署AI新质生产力的企业订单交付周期缩短41%,你还在用旧范式决策?
  • 一文读懂档案袋怎么密封?避开90%人踩中的档案失效误区 - 资讯报道
  • 5个选项搞定工业以太网交换机选型
  • 抢抓团餐产业升级新机遇,仙津饮品依托核心产品力拓展农产品渠道饮料合作空间,助力团餐食材供应多元化 - U渠道
  • 2026燕郊全屋定制工厂** 两大主流源头工厂实力对比 - 资讯综合
  • 阜阳企业布局豆包流量:读懂豆包排名优化与GEO优化落地思路
  • 5分钟快速搭建原神私服:KCN-GenshinServer图形化一键服务端终极指南
  • 极简高端工装风!仿石材铝单板适配各类公装项目
  • 深度解析:如何用OBS背景移除插件打造专业级虚拟演播室
  • 高效解锁喜马拉雅音频资源的5个实用技巧:xmly-downloader-qt5完全指南
  • 乾元通多链路聚合设备,无人机的超远距离图传网络保障方案
  • Depth-Anything-V2:从单目图像到三维世界的深度感知革命
  • **作为一个后端,我不想再接第 50 个“帮我导个文档“的需求了**
  • 数据结构-线性表-顺序表1
  • 2026医院绩效系统考核公司盘点:医院管理咨询公司+医院等级评审系统公司+医院指标系统公司甄选 - 栗子测评
  • 2026上海装修公司口碑实测!跑了10家工地,我摸清了这9家真实底细 - 品牌日记
  • 昆山工厂金属屋顶防腐翻新推荐:苏州翰联建筑值得优先了解 - 滚动商讯
  • 限流阈值拍脑袋定成 1000 QPS 那天,我们挡掉了 27% 的正常请求:令牌桶与漏桶的 4 个参数陷阱
  • AI邀请函生成效率革命(实测数据:从2小时→83秒):2024最新Prompt+模板+平台选型全拆解
  • 工装外墙美学设计!仿石材铝单板逼真肌理超耐看