事件总线定义:事件总线是对发布-订阅模式的一种实现。它是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需要相互依赖,达到一种解耦的目的。
事件总线的处理流程:
发布订阅模式主要有两个角色:
- 发布方(Publisher):也称为被观察者,当状态改变时负责通知所有订阅者。
- 订阅方(Subscriber):也称为观察者,订阅事件并对接收到的事件进行处理。
发布订阅模式有两种实现方式:
- 简单的实现方式:由Publisher维护一个订阅者列表,当状态改变时循环遍历列表通知订阅者。
- 委托的实现方式:由Publisher定义事件委托,Subscriber实现委托。
总的来说,发布订阅模式中有两个关键字,通知和更新。
被观察者状态改变通知观察者做出相应更新。
解决的是当对象改变时需要通知其他对象做出相应改变的问题。
主要是处理事件,包括4个主要组件:事件源、事件监听器、通道和事件总线。消息源将消息发布到事件总线上的特定通道上。侦听器订阅特定的通道。侦听器会被通知消息,这些消息被发布到它们之前订阅的一个通道上。
使用场景:安卓开发、通知服务
优点:新的发布者、订阅者和连接可以很容易地添加。对高度分布式的应用程序有效。
缺点:可伸缩性可能是一个问题,因为所有消息都是通过同一事件总线进行的。
二、基于事件驱动的分布式异步架构模式多用于构建高可伸缩的反应式应用程序,适用于各种从简单到复杂的应用场景。它的核心思想是去耦合,将消息的发送和接收分开,实现异步处理消息事件。
事件总线是实现基于事件驱动模式的方式之一,或者可以将其称为“Broker Topology”。事件发送者将事件消息发送到一个中心 broker 上,事件订阅者向中心 broker 订阅和接收事件,然后再处理接收到的事件。当然,订阅者不仅可以接收和消费事件,它们本身也可以创建事件,并将它们发送到事件总线上。下面列出了 4 种事件总线的实现方式,并对它们的优缺点进行了总结。
1. 向所有的订阅者发送事件
事件总线直接将输入事件(红色箭头)发送给订阅者(蓝色方块)
参与者
事件总线、订阅者(事件处理器)、事件创建者
实现
事件创建者向事件总线发送事件,事件总线将收到的事件发送给所有的订阅者。订阅者既可以处理接收到的事件,也可以创建新事件,然后把它们发送给事件总线。事件总线不关心订阅者是否成功接收到消息。
功能需求
通知、订阅、退订。
优势
实现起来很简单。
不足
事件总线需要将每一个事件消息复制一份给订阅者,也就是说,如果有1000个订阅者,每一个事件都会有1000份拷贝,这样会占用大量的内存。
事件总线不保证消息传递的可靠性,它会尝试给订阅者发送消息,而且只会尝试一次,如果出现错误,比如网络连接错误,订阅者可能就会收不到消息。
另外,事件总线不负责过滤消息,所以订阅者需要自己实现过滤逻辑。