构建事件驱动架构的块

时间:2018-01-03 09:14:28

标签: design-patterns pipeline event-driven

在数据的流水线处理中,我们使用

  • 发电机(S)

  • 中间处理器引擎(聚合操作)

  • 终止子(S)

例如,使用python generator&协同例程,

enter image description here

&安培;

enter image description here

&安培;

enter image description here

可以生成器 - 中级处理器 - 终结者被视为event-driven-architecture的构建块?

1 个答案:

答案 0 :(得分:2)

取决于。

您的事件驱动架构缺少的是事件。只要您的所有模块(生成器,终结器等)都可以接收事件并将事件发送给所需的收件人,它就是一个事件驱动的架构。

有时,您会像管道一样非常类似于事件驱动架构,但传递的信息不会被视为事件。例如,Java lambda流传递的是Data,而不是事件。

现在,如果一个人决定将所有数据元素称为“事件”,那么可以认为它是事件驱动的;但是,由于事件通常具有不会在流的处理阶段发生变异的结构(或至少是一种类型),因此该论证会很快死亡。

考虑到这个小想法。是的,所有处理事件的方法都来自一个源(生成器),通过可能完全消耗该事件的处理节点(终结器),或者通过可能生成其他事件的节点(中间处理器)。

但是,此分类是您的,并不是事件处理系统的要求。例如,我可以拥有多个这些角色的节点。单个节点可能会终止已经处理其终止的员工的“员工退出”事件,同时执行某些工作并转发“removeFromPayroll”事件以计算尚未处理其终止的员工。同样,安排每日电子邮件提醒的事件并不完全是“生成器”,而是“生成器”的许多方面。

所以你的分类很好,只要你意识到它是一个分类,你要添加到一个系统来帮助你组织它,而不是一组刚性的“节点类型”。

----示例----

你要谈论的更好的例子是

(origin) -> follow_news_topic -> (story web spider) -> new_news_topic_article -> (archiver)

在这里我们可以清楚地看到有两个事件“follow_news_topic”和“new_news_topic_article”

“事件定位”是对事件的关注。节点是通用元素,但它们不够通用,不能完全适合您的3个分类之一。一个节点可能会在您的分类下拉出双重任务(甚至三重任务)。