现代C++软件架构:方法与实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.5.1 基于事件的常见拓扑结构

事件驱动架构的两种主要拓扑结构分别是基于代理(broker)的和基于中介(mediator)的。这两种拓扑结构的区别是事件在系统中的流动方式不同。

当一个事件需要多个任务或步骤,而这些任务或步骤都可以独立执行时,适合使用中介拓扑结构(见图2.1)。产生的所有事件一开始都位于中介的事件队列中。中介知道处理事件需要做什么,但并不执行,而是通过每个事件处理器的事件通道将事件分派到适当的处理器。

图2.1 中介拓扑结构

如果这让你想起业务流程,那么说明你有很好的直觉。你可以在业务流程管理(Business Process Management,BPM)或业务流程执行语言(Business Process Execution Language,BPEL)中实现此拓扑结构。你也可以使用诸如Apache Camel、Mule ESB等技术来实现它。

代理是一个轻量级的组件,它包含所有的队列,但不对事件的处理进行编排。它可以要求事件接收方订阅特定类型的事件,然后简单地转发订阅事件。许多消息队列都依赖于代理,例如ZeroMQ,它是用C++编写的,目标是实现零浪费和低延迟。代理拓扑结构如图2.2所示。

图2.2 代理拓扑结构

既然了解了基于事件的系统中使用的两种常见拓扑结构,现在我们来了解一个以事件为核心的强大的架构模式。