news 2026/6/12 19:07:54

观察者模式在分布式系统中的变体:发布-订阅模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
观察者模式在分布式系统中的变体:发布-订阅模式

推荐一个学习网站,http://easelearningai.com  输入学习主题,会根据你的知识背景,帮你把学习内容讲得通俗易懂。

观察者模式在分布式系统中的变体:发布-订阅模式

概要

简单说,发布-订阅模式就是“你只管喊,谁想听谁听”——一个消息发布者(喊话的人)不需要知道谁会收到消息,甚至不需要知道有没有人在听;而订阅者(听众)只关心自己感兴趣的内容,不需要知道是谁在喊。

这听起来是不是很像我们日常生活中的微信群?你在群里发了一条消息,群里的每个人都能看到。但你不需要知道谁在看、谁没看,也不需要把消息挨个私聊发给每个人。这就是发布-订阅模式最朴素的原型。

但等等,你可能会问:“这和观察者模式有什么区别?观察者模式不也是‘一个对象变化,通知所有依赖它的对象’吗?”

好问题。这正是我们要讲的核心——从观察者模式到发布-订阅模式,是一次从“点对点”到“广播站”的进化。观察者模式就像你直接给朋友打电话:“我到了,你出来吧。”——你需要知道对方是谁,电话号码是多少。而发布-订阅模式就像你在广场上用喇叭喊:“我到了,想见我的来广场东门。”——你不需要知道谁会来,甚至不需要知道有没有人来。

这个进化,是为了解决分布式系统(比如微服务架构、消息队列系统)中一个根本性的问题:当系统变得庞大、分散、动态变化时,如何让不同组件之间高效、松耦合地通信?


整体架构流程

想象一个大型购物网站:用户下单后,系统需要做很多事——扣库存、发短信通知、更新用户积分、生成物流单、通知商家备货……如果这些步骤都串在一起做,一旦某个环节卡住(比如短信服务挂了),整个下单流程就瘫痪了。

发布-订阅模式怎么解决这个问题?它引入了一个中间人——通常称为“消息代理”或“事件总线”。整个流程变成了这样:

  1. 发布者(下单服务):用户下单后,它只做一件事——向消息代理发送一条消息:“订单已创建,订单号是12345”。它不需要关心谁会处理这条消息。

  2. 消息代理(中间人):收到消息后,它根据消息的“主题”(比如“订单创建”),把消息复制多份,分发给所有订阅了这个主题的消费者。

  3. 订阅者(各种服务):库存服务、短信服务、积分服务……它们各自订阅了“订单创建”这个主题。当消息到达时,它们各自做自己的事,互不干扰。

这个流程的核心变化是:发布者和订阅者之间不再有直接联系。就像你发了一条朋友圈,你的朋友能看到,但你不必知道谁看了、谁没看。

为什么需要这个“中间人”?

如果不用发布-订阅模式,直接让

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 19:07:54

3分钟搞定学术文献自由:Zotero SciHub插件终极指南

3分钟搞定学术文献自由:Zotero SciHub插件终极指南 【免费下载链接】zotero-scihub A plugin that will automatically download PDFs of zotero items from sci-hub 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-scihub 还在为学术文献的付费墙烦恼…

作者头像 李华
网站建设 2026/6/12 19:07:54

终极分屏游戏方案:Nucleus Co-Op 完全指南

终极分屏游戏方案:Nucleus Co-Op 完全指南 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 还在为本地多人游戏需要多台电脑而烦恼吗&am…

作者头像 李华
网站建设 2026/6/12 19:07:18

从技术视角聊聊:好用的 B2B2C 商城具备哪些特质?

最近有朋友问我,要搞一个B2B2C多商户平台怎么选型?说实话,市面上的商城系统我撸过不下十套,从最早的单体PHP,到后来的各种SaaS、JAVA,踩过的坑比我写过的BUG都多。SaaS的年费越交越肉疼,数据还不…

作者头像 李华
网站建设 2026/6/12 19:04:52

3个必学技巧:彻底解决ExplorerPatcher任务栏属性打不开的困扰

3个必学技巧:彻底解决ExplorerPatcher任务栏属性打不开的困扰 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher 你是否在使用Explore…

作者头像 李华
网站建设 2026/6/12 19:03:55

海关人车全域无感管控与跨境镜头连续跟踪系统技术方案

方案概述当前海关口岸出入境通道、查验区、堆场、卡口及跨境边界区域存在人车流动量大、通行流线复杂、多区域遮挡、跨镜头轨迹断链、目标ID跳变、盲区监管空白等痛点。传统监控仅具备录像与事后回看能力,无法实现实时态势感知、目标连续追踪与精细化空间管控&#…

作者头像 李华