Pub/Sub是什么意思

Pub/Sub(发布/订阅模式)​​ 是一种异步消息通信范式,用于分布式系统中不同组件之间的解耦通信。它的核心思想是将消息的发送方(发布者)​​ 和接收方(订阅者)​​ 分离,通过一个中间层(消息代理)进行消息的路由和分发。


核心概念:

  1. 发布者(Publisher)​

    • 负责产生并发送消息到指定主题(Topic)​,不关心谁接收消息。

    • 例如:传感器发布温度数据、用户行为服务发送日志。

  2. 订阅者(Subscriber)​

    • 主动订阅感兴趣的主题,只接收该主题下的消息。

    • 例如:数据分析服务订阅日志主题,实时告警服务订阅异常数据主题。

  3. 消息代理(Broker)​

    • 中间件组件(如 ​Kafka、RabbitMQ、Google Pub/Sub、Redis Pub/Sub),负责:

      • 接收发布者的消息。

      • 将消息按主题分发给所有订阅者。

      • 管理订阅关系、消息持久化(可选)、负载均衡等。


工作流程:

  1. 订阅者向 Broker ​注册对某个主题的兴趣。

  2. 发布者向 Broker ​发送消息,并指定目标主题。

  3. Broker ​匹配消息的主题,将其复制并推送给所有订阅该主题的订阅者。

  4. 订阅者异步处理收到的消息。


核心特点:

  • 解耦性

    发布者和订阅者无需知道对方存在,添加/移除订阅者不影响发布者。

  • 动态伸缩

    订阅者数量可动态增减,Broker 自动处理负载分配。

  • 一对多广播

    一条消息可同时送达多个订阅者(对比点对点队列的单一消费者)。

  • 异步通信

    发布者发送后无需等待,订阅者按自身节奏消费。


常见应用场景:

  1. 实时通知系统

    :用户注册后,通知邮件服务、推荐系统、数据分析服务并行处理。

  2. 分布式系统解耦

    微服务间通过主题通信,避免直接调用依赖(如订单服务发布order_created,库存服务消费)。

  3. 数据同步

    数据库变更通过CDC(Change Data Capture)发布到主题,多个系统同步数据(如缓存更新、搜索索引)。

  4. 物联网(IoT)设备监控

    百万级设备上报数据至主题,由不同的订阅者处理实时告警、持久化存储、批量分析。

  5. 聊天室/直播互动

    用户消息发布到房间主题,所有订阅该房间的客户端实时接收。


对比其他消息模式:

Pub/Sub

点对点队列(P2P Queue)​

消息消费

一条消息发给所有订阅者

一条消息仅由一个消费者消费

订阅关系

动态订阅/取消订阅主题

队列固定,消费者需绑定队列

场景

广播通知、事件驱动

任务分发、负载均衡(如订单处理)


优缺点:

✅ ​优势

  • 系统扩展性强,新增消费者无需修改发布者。

  • 容错性高:单个订阅者故障不影响整体。

  • 支持高吞吐量场景(如Kafka)。

❌ ​挑战

  • 消息可能重复消费(需幂等设计)。

  • 顺序保证需额外配置(如Kafka分区)。

  • 架构复杂度增加(需部署Broker)。


主流实现工具:

  • 云服务​:Google Cloud Pub/Sub, AWS SNS/SQS, Azure Service Bus

  • 开源​:Apache Kafka, RabbitMQ(需插件), Redis Pub/Sub, NATS

总结:

Pub/Sub 通过主题广播+异步解耦的机制,成为构建高扩展性、松耦合分布式系统的基石。适用于需要事件驱动、实时广播、服务解耦的关键场景,是现代云原生架构的核心组件之一。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/93951.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redisson3.14.1及之后连接阿里云redis代理模式,使用分布式锁:ERR unknown command ‘WAIT‘

文章目录一、问题背景1、问题原因2、阿里云对Redisson的支持二、解决方案1、继续使用Redisson3.14.0版本2、阿里云redis改为直连模式3、升级Redisson版本到 3.47.0一、问题背景 1、问题原因 阿里云Redis分直连和代理模式,其中代理模式是不支持WAIT命令的。 目前尝…

Linux: RAID(磁盘冗余阵列)配置全指南

Linux:RAID(磁盘冗余阵列)配置一、RAID 核心概念 RAID(Redundant Array of Independent Disks,磁盘冗余阵列)通过将多个物理磁盘组合为一个逻辑存储设备,实现提升读写性能、增强数据安全性或平衡…

《GPT-OSS 模型全解析:OpenAI 回归开源的 Mixture-of-Experts 之路》

目录 一、引言 二、GPT-OSS 模型简介 1. 版本与定位 2. 架构设计与技术亮点 2.1 Mixture-of-Experts(MoE)架构 2.2 高效推理机制与优化技术 2.3 模型对比 三、模型部署 1. 安装相关依赖 1.1 uv 安装 1.2 conda 安装 1.3 Transformers 运行 g…

【力扣热题100】双指针—— 接雨水

题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 注意:答案中不可以包含重复的三元组。输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由…

51单片机拼接板(开发板积木)

一、前言 1.1 背景 读书那会儿(2013年左右)网上接了很多51单片机的设计。 当时有个痛点: 每张板子都是定制的,画板子,打样,写代码需要花费很多时间。 希望有一张板子,能够实现绝大多数单片机的功能&#xf…

使用segment-anything将目标检测label转换为语义分割label

使用segment-anything将目标检测label转换为语义分割label一、segment-anything简介二、segment-anything安装2.1安装方法2.2预训练模型下载三、将目标检测label转换为语义分割label3.1示例代码3.2代码说明一、segment-anything简介 segment-anything是facebookresearch团队开…

【unitrix数间混合计算】3.3 无符号整数标记trait(bin_unsigned.rs)

一、源码 这段代码是用 Rust 语言实现的一个类型级无符号二进制整数系统,通过类型系统在编译时表示和操作二进制数字。这是一种典型的"类型级编程"(type-level programming)技术。 use crate::number::{U0, Bin, Bit, BinInt};/// …

Python基本语法总结

1.类(Class)在Python中类(Class)是面向对象编程(OOP)的核心概念。1.1.类的基本定义最简单的类class Cat:"""这是一个最简单的类"""pass #创建实例 obj Cat()包含方法的类cl…

数据结构05(Java)-- ( 归并排序实质,归并排序扩展问题:小和问题)

前言 本文为本小白🤯学习数据结构的笔记,将以算法题为导向,向大家更清晰的介绍数据结构相关知识(算法题都出自🙌B站马士兵教育——左老师的课程,讲的很好,对于想入门刷题的人很有帮助&#x1f4…

税务专业人员能力构建与发展路径指南

CDA数据分析师证书含金量高,适应了未来数字化经济和AI发展趋势,难度不高,行业认可度高,对于找工作很有帮助。一、税务专业人员的核心能力框架能力维度关键技能要素专业工具与方法论实践输出成果税务法规应用税种政策解读、法规更新…

Linux中rsync使用与inotify实时同步配置指南

Linux中rsync使用与inotify实时同步配置指南 一、rsync 简介 rsync(Remote Sync)是 Linux 系统下的一款高效数据镜像和备份工具,用于在本地或远程同步文件和目录。 支持本地复制、基于 SSH 的远程同步,以及使用自有 rsync 协议的同…

Unicode 字符串转 UTF-8 编码算法剖析

📊 Unicode 字符串转 UTF-8 编码算法剖析 ——从 C# char 到 C wchar_t 的编码转换原理 引用:UTF-8 编解码可视化分析 🔍 1. 算法功能概述 该函数将 Unicode 字符串(C# string)转换为 UTF-8 编码的字节数组&#xf…

php的安全性到底怎么样

PHP作为一种流行的服务器端脚本语言,被广泛应用于Web开发。然而,由于PHP是一种较为灵活的语言,其安全性议题一直备受争议。在这篇文章中,我将从多个方面来讨论PHP的安全性,包括常见的安全漏洞、防范措施以及最佳实践。…

mapbox高阶,结合threejs(threebox)添加建筑glb模型,添加阴影效果,设置阴影颜色和透明度

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言 1.1 ☘️mapboxgl.Map 地图对象 1.2 ☘️mapboxgl.Map style属性 1.3 ☘️threebox loadObj加载模型 二、🍀…

SSM从入门到实战:1.6 Spring数据访问与JDBC模板

👋 大家好,我是 阿问学长!专注于分享优质开源项目解析、毕业设计项目指导支持、幼小初高的教辅资料推荐等,欢迎关注交流!🚀 06-Spring数据访问与JDBC模板 📖 本文概述 本文是SSM框架系列Spri…

下一代IT服务管理:ITIL5会是什么样?

ITIL4发布到现在也就5年多时间,按照以往的更新节奏,ITIL5最早也得2027年之后。但现在IT发展的速度,跟以前完全不是一个量级。AI都快把我们的饭碗抢了(开个玩笑),ITIL要是还按部就班,估计真要被时…

最新研究进展:2023-2025年神经机器翻译突破性成果

文章目录 一、模型架构创新 1.1 混合架构的崛起 1.2 多模态翻译的突破 1.3 大语言模型与NMT的深度融合(2023-2024) 1.4 非自回归翻译(NAT)的效率革命(2024) 二、数据与训练策略优化 2.1 低资源语言翻译的飞跃 2.2 动态数据增强技术 三、效率与部署 3.1 模型压缩与加速 3.…

OpenTelemetry WebSocket 监控终极方案:打通最后一公里

概述 OpenTelemetry,以下简称 OTEL,是由 CNCF 托管的“一站式可观测性标准”,把指标、链路、日志三大信号统一为单一 SDK/API,零侵入地采集从浏览器、移动端到后端、容器、云服务的全栈遥测数据,并支持 40 后端一键导…

VS Code 出现的 Web 视图加载错误和服务工作者注册失败问题解决方案

针对 VS Code 或 Cursor (vscode系)中出现的 Web 视图加载错误和服务工作者注册失败问题,以下是永久性解决方案的完整操作指南:解决方案步骤打开命令面板 使用快捷键 CtrlShiftP(Windows/Linux)或 CmdShift…

【qml-4】qml与c++交互(类型多例)

背景: 【qml-1】qml与c交互第一次尝试(实例注入) 【qml-2】尝试一个有模式的qml弹窗 【qml-3】qml与c交互第二次尝试(类型注册) 【qml-4】qml与c交互(类型多例) 【qml-5】qml与c交互&#…