发布订阅模式是什么,主要应用场景有哪些?

发布订阅模式是一种通过消息代理实现发布者与订阅者完全解耦的消息传递模式,它让系统各模块可以独立扩展,是异步通信和事件驱动架构的基石。

发布订阅模式与观察者模式到底有什么区别?

很多开发者最开始接触设计模式时,常常把观察者模式和发布订阅模式混为一谈,虽然它们都处理事件通知,但设计思想有本质区别,观察者模式中,被观察者直接维护一个观察者列表并调用其方法,这是直接耦合,而发布订阅模式引入了一个中间层消息代理,发布者将消息发送给代理,订阅者从代理订阅消息,两者互不知晓

「观察者模式」与「发布/订阅模式」,你分得清楚吗?
加载中
「观察者模式」与「发布/订阅模式」,你分得清楚吗?

从通信方式来看,观察者模式通常是同步的,一个事件触发后所有观察者依次执行,容易阻塞,发布订阅模式天然支持异步,发布者发出消息后立即返回,订阅者可以独立处理,在应用范围上,观察者模式适合同一个进程内的事件监听,比如GUI组件的事件处理;发布订阅模式则能跨进程、跨网络,适用于微服务和分布式系统。

两者的关键差异对比如下:

发布订阅模式是什么,主要应用场景有哪些?

特性 观察者模式 发布订阅模式
耦合程度 被观察者直接引用观察者 完全解耦,双方只依赖代理
通信方式 同步调用 异步消息传递
应用范围 通常限于单进程 跨进程、跨网络、跨系统
消息路由 无路由机制,广播所有观察者 支持主题、通配符等灵活路由
扩展性 增加观察者需要修改被观察者 增加发布者或订阅者无需改动现有代码

如果你在搭建一个分布式系统,多数情况下发布订阅模式是更合适的选择。

哪些场景最适合使用发布订阅模式?

发布订阅模式在需要解耦和异步处理的场景中优势明显,以下是几个典型应用:

  • 用户注册后的通知:注册成功后系统需要发送欢迎邮件、短信、初始化积分等,如果同步处理,响应时间会累加,使用发布订阅模式,注册服务只发布“用户注册成功”事件,其他服务各自订阅并异步处理,响应速度大幅提升。
  • 物联网数据采集:大量设备上报数据,平台需要将数据分流到存储、分析、告警等多个模块,通过消息队列实现发布订阅,可以轻松应对高并发写入,同时降低各模块之间的依赖。
  • 电商订单状态变更:订单创建后需要通知库存系统减库存、通知物流系统生成运单、通知用户系统发送状态更新,这些操作都可以通过事件驱动,各系统独立订阅相关事件,互不影响。
  • 日志收集与监控:应用服务将日志消息发布到消息队列,日志中心订阅后统一存储和分析,避免影响业务性能,也方便后续检索。

行业共识认为,在微服务架构中,发布订阅模式已经成为服务间通信的标准方式之一,它让每个服务可以独立演化,也便于扩展新的消费方。

如何用代码实现发布订阅模式?

为了让你快速上手,这里提供一个简单的内存版发布订阅实现,核心逻辑是维护一个事件映射表。

class EventBus {
  constructor() {
    this.events = {};
  }
  // 订阅事件
  on(event, callback) {
    if (!this.events[event]) this.events[event] = [];
    this

发布订阅模式是什么,主要应用场景有哪些?

.events[event].push(callback); } // 发布事件 emit(event, ...args) { (this.events[event] || []).forEach(cb => cb(...args)); } // 取消订阅 off(event, callback) { if (!this.events[event]) return; this.events[event] = this.events[event].filter(cb => cb !== callback); } }

使用示例:

const bus = new EventBus();
const handler = (msg) => console.log(msg);
bus.on('message', handler);
bus.emit('message', 'Hello World');
bus.off('message', handler);

在实际项目中,你会使用成熟的消息中间件,以RabbitMQ为例,基本操作路径如下:

  1. 安装RabbitMQ服务,比如通过Docker运行:docker run -d --name rabbitmq -p 5672:5672 rabbitmq
  2. 安装客户端库,Node.js环境下使用npm install amqplib
  3. 创建连接和通道。
  4. 声明一个Topic类型交换机,用于实现发布订阅的路由。
  5. 发布者将消息发布到交换机,并指定路由键。
  6. 消费者声明队列,绑定到交换机,并订阅感兴趣的路由键模式(如表示接收所有消息)。

这些步骤你可以在本地环境中亲手实践,验证发布订阅机制的实际效果。

发布订阅模式中消息中间件的价格与地域如何考量?

当系统规模增大,使用云服务商提供的消息队列服务是常见选择,不同云厂商的计费模型和地域覆盖差异明显。价格方面,有的按消息量计费,有的按吞吐量或预留容量计费,你需要预估业务量,选择最经济的方案。地域方面,如果你的服务部署在多个城市或国家,需要考虑消息队列是否支持跨地域复制,以及跨地域传输的延迟和费用,简米云RocketMQ支持跨地域同步,但会产生额外的带宽费用,在成本敏感的场景下,建议将消息队列与主要服务部署在同一地域,减少网络开销,对于容灾需求,可以选用主从架构或跨地域备份,但需仔细评估成本。

发布订阅模式是什么,主要应用场景有哪些?

在选型时,除了价格和地域,还要关注消息可靠性、持久化、重试机制等,这些直接影响系统稳定性,不少团队反馈,在初期架构设计时统一规划地域和容量,能避免后期迁移带来的额外成本。

关于发布订阅模式的常见问题与解答

问:发布订阅模式有什么缺点?

答:主要缺点是引入了消息代理,增加了系统复杂度,消息的异步性可能导致问题排查困难,需要额外关注消息丢失和重复消费,如果代理成为瓶颈,会影响整体性能,因此需要做好监控和容量规划。

问:发布订阅模式与消息队列是什么关系?

答:消息队列是发布订阅模式的一种典型实现,发布订阅模式是一种架构思想,而消息队列(如Kafka、RabbitMQ)是具体的产品,通过队列、主题等机制来实现发布订阅,在实际应用中,消息队列通常还提供持久化、分片、消费组等高级特性。

问:如何保证发布订阅模式中消息的可靠性?

答:可以从三个层面入手:发布者端启用消息确认机制,确保消息成功到达代理;代理端启用持久化,将消息写入磁盘避免丢失;订阅者端处理完消息后发送确认,代理收到确认后才删除消息,不同中间件有具体配置,如RabbitMQ的publisher confirm和consumer ack,Kafka的acks参数和offset提交策略。

发布订阅模式通过解耦发布者和订阅者,为构建可扩展、高可用的分布式系统提供了坚实基础,掌握这一模式,你将能更从容地应对复杂业务场景中的异步通信需求。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/546395.html

(0)
服务器更换IP要注意什么,服务器更换IP会掉线吗
上一篇 2026年8月4日 23:10
负载均衡预警频繁出现怎么办,如何快速定位原因?
下一篇 2026年8月4日 23:13

相关推荐

  • 大模型微调标注数据怎么做?从业者揭秘大实话

    大模型微调的成功与否,核心并不在于算法模型的复杂程度,而在于标注数据的质量与一致性,高质量、场景化、逻辑自洽的标注数据,才是决定模型垂直领域能力的生死线, 很多企业微调失败的根本原因,是用“大模型预训练”的思维去做“微调数据标注”,盲目追求数量而忽视了任务导向的精细度,微调不是填鸭式教学,而是职业技能培训,数据……

    2026年3月12日
    22500
  • 大模型加超级入口复杂吗?一篇讲透大模型超级入口

    大模型与超级入口的结合,本质上是生产力工具的代际升级,其核心逻辑并不晦涩,关键在于“理解意图”与“分发服务”的无缝连接,这并非简单的技术叠加,而是人机交互方式的根本性重构,过去我们通过点击图标获取服务,未来我们通过自然语言直接调用能力,大模型提供了“大脑”,超级入口提供了“手脚”,两者结合将原本割裂的应用生态整……

    2026年3月19日
    12400
  • 大模型问答问数有多少?从业者揭秘大模型问答真实数据

    大模型问答问数并非单纯的“计数”游戏,而是衡量企业数据治理能力与模型落地成效的核心指标,从业者的共识在于:盲目追求问答数量的堆砌,是导致大模型项目“高开低走”甚至烂尾的根本原因,真正的核心竞争力在于问答的准确率、覆盖的场景深度以及数据清洗的质量,而非界面上显示的数字大小,高质量的数据输入决定高质量的问答输出,这……

    2026年3月28日
    10700
  • 国内大宽带DDOS配置如何操作?DDOS防护方案详解

    国内大宽带DDoS防护配置核心方案面对利用国内大带宽资源发起的DDoS攻击,其破坏力巨大,核心防护策略在于构建”近源清洗 + 智能调度 + 立体防御”的体系,结合国内网络特点部署高防资源,实现攻击流量的精准识别、高效清洗与业务流量的无损调度, 大宽带DDoS攻击的威胁本质资源滥用: 攻击者控制大量被入侵的国内高……

    2026年2月14日
    19400
  • 腾讯CDN是什么?腾讯CDN加速服务怎么使用

    腾讯CDN(内容分发网络)是腾讯基于其庞大的全球节点资源,通过智能调度将网站内容缓存至离用户最近的边缘服务器,从而显著降低延迟、提升加载速度并保障业务稳定性的云服务产品,想象一下,你开了一家全国连锁的奶茶店,如果所有顾客都只能去总店排队,那队伍肯定长到让人绝望,奶茶也早就凉透了,腾讯CDN扮演的角色,就是在全国……

    2026年6月12日
    3200
  • 3000亿参数大模型怎么研究?大模型训练技巧分享

    深入研究3000亿参数级别的大模型后,最核心的结论显而易见:参数规模的跃升并不直接等同于智能水平的线性增长,真正的商业价值与技术壁垒,已经从单纯的“算力军备竞赛”转移到了“数据质量治理”与“推理成本控制”的博弈中,对于企业和开发者而言,盲目追求参数量级不仅是资源的浪费,更可能因为推理延迟过高而错失应用落地的最佳……

    2026年3月12日
    16600
  • dashjs cdn加速配置,dashjs cdn加速配置教程

    dashjs CDN的核心优势在于其开源、轻量且原生支持MPEG-DASH标准,通过结合高性能CDN分发,能显著降低首屏加载时间并提升高并发下的播放稳定性,是构建跨平台自适应流媒体服务的理想技术选型,在2026年的流媒体技术语境下,视频分发不再仅仅是带宽的竞争,更是协议适配与边缘计算协同能力的较量,dashjs……

    2026年6月24日
    3000
  • 佛山建网站费用需要多少钱,哪家建站公司便宜

    在佛山,一个标准的企业官网建设费用通常在3000元到5万元之间,具体取决于网站功能、设计复杂度以及开发公司的服务模式, 这个范围看似宽泛,但背后有一套清晰的定价逻辑,无论是初创公司还是传统工厂,理解这笔钱花在哪,才能避免踩坑,佛山建网站费用多少?核心因素解析佛山作为制造业重镇,大量企业需要通过网站触达客户,费用……

    2026年7月15日
    1000
  • cdn怎么买,cdn购买渠道有哪些

    购买CDN服务需先明确业务场景与流量规模,2026年主流选择为阿里云、腾讯云等头部云厂商或网宿科技等专业服务商,建议通过官方控制台按需开通并按量付费或购买资源包以降低成本,在数字化转型进入深水区的2026年,内容分发网络(CDN)已不再是互联网企业的“可选项”,而是保障用户体验与业务稳定性的“基础设施”,面对市……

    2026年6月1日
    5100
  • 服务器安全运行机制是什么?服务器如何防御黑客攻击

    2026年服务器安全运行机制的核心在于“零信任架构为底座、AI驱动自适应防护、软硬协同加密隔离”,构建从芯片到应用的全栈动态免疫体系,2026服务器安全机制的核心架构演进零信任架构的全面深化传统的边界防护已无法应对内网横向移动攻击,2026年,零信任从“网络层”下沉至“工作负载层”,持续验证:摒弃一次登录终身信……

    2026年4月26日
    5400

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注