今天我们来看下代理者拓扑(Broker Toplogy)。
代理者拓扑和调度者拓扑的不同点在于:代理者拓扑没有中心化的事件调度者;相反,消息流是通过轻量级的消息代理将消息分布到消息处理器组件中。当你有一个简单的事件处理流程,但是你不想或者不需要一个中心化的事件编排时,代理者拓扑将会大有用处。
代理者拓扑有两个主要架构组件:代理者组件和事件处理器组件。代理者组件可以是中心化的,也可以是非中心化的,包含所有事件流需要使用的事件通道。代理者组件中的事件通道可以是消息队列,消息主题,或者是两者的结合。
上图为代理者拓扑的图示。从上图中可以看出,没有中心化的事件调度者组件控制与编排初始化事件;而是每个事件处理器负责处理事件,并且发布一个新的事件来表示自己刚执行的动作。例如:一个平衡股票组合事件处理器收到了一个股票分割初始化事件。基于这个初始化事件,平衡股票组合事件处理器可能会重整投资平衡,然后发布一个重整投资平衡的新事件到代理者,然后其他的事件处理器可能会获取到这个新事件,执行自己的事件处理器。注意:可能事件处理器发布的新事件没有任何一个其他的事件处理器会接收到(可能是为了应用程序未来需要提供的功能或者扩展)。
为了举例说明代理者拓扑如何工作的,我们来举一个和调度者拓扑一样的例子(保险搬家)。由于没有中心化的事件调度者来接收初始化事件,用户处理组件则直接接收事件,改变用户的地址,并发送一个新事件:用户的新地址(例如改变地址事件)。在这个例子中,有两个事件处理器对修改地址事件感兴趣:价格处理和理赔处理。价格处理器组件根据新地址来计算赔率,并发布一个新事件(例如:重新计算价格事件)。理赔处理组件收到相同的地址修改事件,然后他跟新一个未赔付的保险索赔,并发布一个新事件:更新索赔事件。这些新事件由其他事件处理器组件接收,且事件链会持续直到没有新的事件发布。
图代理者拓扑示例
从上图可以看出,代理者拓扑是一个基于事件链来进行业务操作功能的。理解代理者拓扑最好的方式是把它想象成一个接力赛。在接力赛中,跑步的人手持一个接力棒,然后奔跑一段距离,然后将接力棒传递给下一棒的接力者,一直持续直到最后一个人到达终点线。对于代理者拓扑来讲:一旦这个事件处理器将事件处理完毕,那么这个处理器将不再设计这条事件的任何处理了。
以上即事件驱动架构代理者拓扑,下篇看一下事件驱动架构分析方面。