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

描述

什么是发布/订阅模式?

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

异步通信

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

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

 

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

 

 

Pub/Sub架构

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

 

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

异步通信

发布-订阅模式

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

 

 

Pub/Sub模型有哪些优势?

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

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

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

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

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

异步通信

 

何时应使用Pub/Sub模式?

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

• 发送事件通知

• 分布式缓存

• 分布式日志记录

• 使用多个数据源

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

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

 

应用场景

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

 

产品推荐

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

 

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分