本文已参与「新人创作礼」活动,一起开启掘金创作之路。
zhuanlan.zhihu.com/p/266630433
事件代表过去发生的事件,事件既是技术架构概念,也是业务概念。以事件为驱动的编程模型称为事件驱动架构EDA
EDA是一种以事件为媒介,实现组件或服务之间最大松耦合的方式
传统面向接口编程是以接口为媒介,实现调用接口者和接口实现者之间的解耦,但是这种解耦程度不是很高,如果接口发生变化,双方代码都需要变动,而事件驱动则是调用者和被调用者互相不知道对方,两者只和中间消息队列耦合。
1. 各种驱动对比****
但是不代表使用了消息系统的架构都是EDA,SOA面向服务驱动的架构中也使用消息系统作为ESB,两者使用方式不同,三种不同交互方式:
时间驱动:比如cron定时计划执行
请求驱动:客户端和服务器端之间,常见SOA
事件驱动:以事件为特征。实时。
请求驱动+消息系统和事件驱动+消息系统有本质区别,前者是由请求者作为消息生产者,主要目的是为了得到响应,因此是一种请求响应模型;
而后者重点是在消息消费者,不是在消息生产者,业务逻辑站在消费者角度完成,业务逻辑的完成靠事件驱动来执行,而前者业务逻辑是在消息生产者完成,当业务逻辑中需要什么依赖或资源,依靠发送消息来拉取完成。这两种区别本质是拉Poll和推Push的区别。
2. 中介 ( Mediator )拓扑结构****
中介拓扑结构适合用于拥有多个步骤,并需要在处理事件时能够根据需要将事件分层的场景
在中介拓扑结构中主要有四种组件:事件队列(event queue), 事件中介, 事件通道(event channel), 和 事件处理器(event processor)。当事件流需要被处理,客户端将一个事件发送到某个事件队列中,由消息队列将其运输给事件中介进行处理和分发。事件中介接收到该消息后,发送给事件通道,让事件通道执行该异步事件中的每一个步骤,使得事件中介能够对事件进行分配、协调。然后事件通道对异步事件的处理会触发事件处理器的监听事件,使事件处理器能够接收来自事件中介的事件,执行事件中具体的业务逻辑,从而完成对传入事件的处理。
事件驱动架构模式中的中介拓扑模式结构大体如下图:
3. 代理 (Broker) 拓扑结构****
代理拓扑结构与中介拓扑结构不同之处在于:代理拓扑结构中没有核心的事件中介;相反,事件流在代理拓 扑结构中通过一个轻量的消息代理(例如:ActiveMQ, HornetQ,等等……)将消息串联成链状,分发至事件处理器组件中进行处理。【代理只做事件的传输,不负责分发】
存在于代理组件中的事件通道可以是消息队列,消息主题,或者是两者的组合。
代理拓扑结构大致如下图,如你所见,在这其中没有一个核心的事件中介组件控制和分发初始事件;相反,每一个事件处理器只负责处理一个事件,并向外发送一个事件,以标明其刚刚执行的动作。