0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

给我两分钟,搞懂发布-订阅模式很轻松!

亿佰特物联网应用专家 2024-10-25 08:06 次阅读

什么是发布/订阅模式?

举一个生活中常见的例子说明:小李到某房产中介提出租房需求,根据需求,房产中介将之前房东发布的出租信息提供给小李选择,小李确定租房后,中介会将信息同步给房东知晓。这是一个典型的发布/订阅模式。房东可以看作是发布者,租户看作是订阅者,房产中介作为消息代理,发布者和订阅者之间通过消息代理进行间接通信

eb09ba72-9264-11ef-b5cd-92fbcf53809c.png

发布-订阅模式演示(租房)

发布/订阅模式特点:
①解耦:发布者和订阅者之间没有直接联系,它们通过中间的消息代理(如消息队列或事件总线)进行通信。这种解耦使得系统更加灵活,可以独立地添加或移除发布者和订阅者,而不会影响其他组件。②异步通信:发布者发布消息后不需要等待响应,可以继续执行其他任务。订阅者可以在方便的时候处理接收到的消息,不必立即响应。③一对多通信:一个发布者可以向多个订阅者发送消息。多个发布者也可以向同一个主题发布消息,所有订阅该主题的订阅者都会收到这些消息。④动态订阅:订阅者可以在运行时动态地订阅或取消订阅某个主题。这种灵活性使得系统能够适应不断变化的需求。⑤广播机制:消息会被广播到所有订阅了该主题的订阅者。每个订阅者都可以独立处理消息,互不影响。

发布/订阅(Pub/Sub,即Publish/Subscribe)是分布式系统中用于不同组件或服务之间异步通信的一种架构设计模式。尽管发布/订阅基于消息队列和事件代理等早期设计模式,但它更加灵活和可扩展。其关键在于,发布/订阅允许在系统的不同组件之间传递消息,而这些组件之间无需知道彼此的身份(即它们是解耦的)。发布/订阅模式的出现源于扩大信息系统规模的必要性。在互联网时代之前,甚至在互联网发展的初期,系统大多是通过静态方式扩展的。然而,随着互联网的扩张和基于Web的应用程序的普及,以及移动设备和物联网设备的广泛应用,系统需要动态地扩展。发布/订阅模式的解耦特性使其成为管理动态可扩展系统架构的理想选择。发布/订阅使得在不增加系统组件程序逻辑负担的情况下管理扩展成为可能。

Pub/Sub架构

Pub/Sub提供了一个框架,用于在发布者(创建和发送消息的组件)和订阅者(接收和使用消息的组件)之间交换消息。请注意,发布者不会以点对点方式向特定订阅者发送消息。相反,使用中介-Pub/Sub消息代理,它将消息分组为称为通道(或主题)的实体。

发布/订阅模型工作原理• 订阅者首先会选择订阅特定的主题,以便能够接收该主题下的所有消息。• 随后,发布者会向这些已选定的主题发送消息,这些消息包含了需要传递的信息或指令。• 消息代理作为核心中介,接收来自发布者的消息,并将其存储在对应的主题中。同时,代理还会负责将这些消息分发给所有已订阅该主题的订阅者。

eb466f08-9264-11ef-b5cd-92fbcf53809c.png

发布-订阅模式

举例说明:
为了更具体地理解Pub/Sub系统的操作,我们可以考虑以下实际场景。设想在家中,你安装了一系列IoT设备,这些设备负责监测烟雾浓度并控制电力与天然气的供应。为了确保这些设备之间能够顺畅且可靠地通信,你可以采用MQTT代理作为消息传递的中心枢纽。在这个场景中,一旦烟雾检测设备(作为发布者)侦测到烟雾并判定为警报状态,它会立即向MQTT代理发送一条包含警报信息的消息。而你的智能手机(作为订阅者之一)已经订阅了相关的烟雾警报主题,因此会立即接收到这条消息,并通知你家中存在烟雾。值得注意的是,Pub/Sub模型的灵活性还体现在订阅者也能转变为发布者的能力上。例如,你的智能手机在接收到烟雾警报后,可以作为一个发布者,向另一个特定主题发送关闭电力和天然气供应的指令消息。此时,负责控制电力和天然气供应的IoT设备(作为订阅者)会接收到这条指令,并据此执行关闭操作,以确保家庭安全。通过这样的方式,即便只发送了一条消息,也能触发两个独立的IoT设备同时做出响应,从而实现了高效的跨设备通信与协同工作。

Pub/Sub模型有哪些优势?

Pub/Sub模式为表带来了许多好处,如:

• 组件之间的松散耦合,使你的系统更加模块化和灵活。

• 高可扩展性(理论上,Pub/Sub允许任意数量的发布者与任意数量的订阅者通信)。

• 与语言和协议无关,这使得将Pub/Sub集成到你的技术堆栈中变得简单快捷。

• 异步、事件驱动型通信,非常适合实时、低延迟的应用程序。

eb9a9f24-9264-11ef-b5cd-92fbcf53809c.png

何时应使用Pub/Sub模式?

Pub/Sub的松散耦合、异步特性和固有的可扩展性使其成为发布者和订阅者数量较高且波动的分布式系统的绝佳解决方案。你可以将Pub/Sub用于许多不同的目的,例如:

• 发送事件通知

• 分布式缓存

• 分布式日志记录

• 使用多个数据源

• 广播更新(一对多消息传送)

• 构建响应式、低延迟的最终用户体验,例如实时聊天和多人游戏协作功能

应用场景

①事件驱动架构:在微服务架构中,不同服务可以通过发布-订阅模式来交换事件,实现松耦合的通信。例如,订单服务可以发布“订单创建”事件,库存服务和支付服务可以订阅该事件并相应地更新库存和处理支付。②实时通知:在社交网络应用中,用户可以订阅他们感兴趣的话题或用户,当有新的内容发布时,系统可以实时通知订阅者。例如,微博、小红书等社交媒体平台使用发布-订阅模式来推送新博文/笔记、评论和点赞通知等。③日志和监控:系统中的各个组件可以发布日志和监控数据,中央日志系统和监控系统可以订阅这些数据,进行集中处理和分析。例如,ELK Stack(Elasticsearch, Logstash, Kibana)和Prometheus等工具可以利用发布-订阅模式来收集和处理日志和监控数据。④物联网:在物联网应用中,设备可以发布传感器数据,中央控制系统和其他设备可以订阅这些数据,进行实时处理和响应(如前面所举烟雾报警的例子)。

产品推荐

ebdb52b2-9264-11ef-b5cd-92fbcf53809c.png亿佰特串口服务器产品涵盖单串口服务器、多串口服务器、Wi-Fi串口服务器以及串口服务器模组等,可提供串口转网络功能,能够将串口数据转换成TCP/IP协议数据,实现串口与网络的双向透明传输。被广泛应用于考勤系统、机房监控、电力监控等场景。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 异步通信
    +关注

    关注

    1

    文章

    57

    浏览量

    10106
  • 模型
    +关注

    关注

    1

    文章

    3088

    浏览量

    48610
  • 分布式系统
    +关注

    关注

    0

    文章

    146

    浏览量

    19187
收藏 人收藏

    评论

    相关推荐

    为什么Xtr111输出短路时没有产生保护动作?

    =4.5V, Xtr 111没有发生输出开路时的保护动作,还保持正常工作状态,这跟数据手册描述的不一样。 输出短路两分钟以后两分钟以后解除短路,输出线路串入300欧电阻, Xtr 111能正常工作。 为什么输出短路时没有产生保护动作?
    发表于 08-09 07:53

    使用OPA615进行峰值保持电路设计,输出的保持信号在两分钟中内会有0.1V左右的衰减,为什么?

    采用如图所示的保持电路,保持信号为1V 1Khz 15ns脉宽的单脉冲信号,在实际电路中发现,电路通电后,输出的保持信号在两分钟中内会有0.1V左右的衰减,出现这样的一个渐变的过程,之后电路输出信号才会保持稳定。每次刚通电都会有这样的现象出现,请问是什么原因造成的?
    发表于 08-13 07:15

    跪求单片机C程序,急需

    用51单片机编写10分钟倒计时,最后两分钟蜂鸣器提示,到时间蜂鸣器提醒,求求啦,急需{:4:}
    发表于 10-26 19:48

    急需单片机10分钟倒计时C程序,急需,求求啦

    用51单片机编写10分钟倒计时,最后两分钟蜂鸣器提示,到时间蜂鸣器提醒,求求啦,急需
    发表于 10-26 19:56

    有谁做过51直流数控电源吗?

    本帖最后由 14jxu 于 2015-8-19 23:09 编辑 我用7805 将15V稳压成5V输出给单片机、DA、AD、和数码管,但是7805没两分钟就受不了了,当我没接数码管的时候可以挺久点。我开始以为是国产芯片的问题,换成12V输入7805,但7812也是两分钟
    发表于 08-19 23:07

    周立功CAN通信做的labview为什么崩溃

    运行两分钟,数据都是对的,然后就直接崩溃了,labview是2014中文版的
    发表于 11-08 11:32

    MQTT协议介绍之一:发布/订阅

    ,MQTT被正式批准为OASIS标准。 MQTT 3.1.1现在是该协议的最新版本。发布/订阅模式发布/订阅
    发表于 08-25 19:58

    关于labview定时采集和取值问题

    利用9213板卡采集温度,要求:1.每两分钟测量一次,2.测量五次,3.取平均值,备注:除过DAQ助手中的定时周期,因为板卡上有个通道是需要高速采集的,不能直接加定时来做这个。利用PLC来做的话
    发表于 03-15 17:10

    Redis的发布订阅机制

    Redis之发布订阅机制
    发表于 06-11 13:21

    单片机为什么要使用C语言呢?

    单片机为什么要使用C语言呢?创客学院两分钟带你搞懂将C向MCU(俗称单片机)8051上的移植始于80年代的中后期。客观上讲,C向8051 MCU移植的难点不少。如:8051的非冯·诺依慢结构(程序
    发表于 07-15 06:11

    ad7190连续转换模式读取一段时间的数据后出错

    AD7190复位后,各个寄存器可以正常读取,但连续采了一两分钟的ADC数据后又出现同样的问题,请问各位大佬有没有什么解决方法。
    发表于 09-18 11:37

    AD7190连续转换模式采了一分钟数据后出现异常怎么解决?

    AD7190复位后,各个寄存器可以正常读取,但连续采了一两分钟的ADC数据后又出现同样的问题,请问各位大佬有没有什么解决方法。
    发表于 12-01 07:47

    两分钟带你了解食材净化机

    身边很多热爱美食的朋友面对厨房都有几个恐惧:洗菜和洗碗,所幸的是,这个工作现在都可以交给机器来做了,它们就是食材净化机和洗碗机。咱们今天就来聊聊食材净化机。使用食材净化机的理由有个,第一:一键
    发表于 01-16 16:14 1779次阅读

    如何测试紫外线LED

      请等待一两分钟,并打开LED。最好不要在没有护目镜的情况下看着它们。
    的头像 发表于 09-26 14:38 6859次阅读
    如何测试紫外线LED

    摩托罗拉edge S开售两分钟销量突破万台

    前不久摩托罗拉发布了自己的edge S手机,这款手机可以说是一鸣惊人,在发售的时候也拿到了很好的成绩。根据摩托罗拉官方宣称,摩托罗拉edge S手机在开售两分钟后随即宣告售罄。这也是摩托罗拉进入国内市场以来取得的比较大的胜利。
    的头像 发表于 02-05 11:39 3052次阅读