【问题标题】:What are Reactors/Reactions in Event-Sourcing?什么是事件溯源中的反应器/反应?
【发布时间】:2018-04-08 18:22:09
【问题描述】:

我是 CQRS 的新手,我阅读了有关投影和投影仪以及反应器的信息,但我的资源并未完全涵盖它。有人可以在事件溯源中彻底定义反应器,或者给我一个链接或书来阅读吗?我的主要问题是:

  • 什么是反应堆?
  • 反应堆的结构是什么?
  • 我们如何实现反应器?

【问题讨论】:

  • 我不知道是否有一个通用的定义,但对我们来说反应器/反应只是事件消费者,当某些事件发生时触发其他服务。 serialized.io/docs/getting-started/reactions
  • @hammarback 没错,但我希望有更好的来源,谢谢你的帮助

标签: cqrs event-sourcing reactor


【解决方案1】:

projection 是一个函数,它接收域事件并将其转换为列表、树、图形等上的动作……

这里的想法是您希望语义域事件存储它们并能够重放它们,但是您需要对它们进行各种解释才能有效地查询它们。因此,您需要一个表示域事件 X 表示给定视图的 INSERTUPDATEDELETE 的投影。

因此,投影基本上是领域事件和 CRUD 操作之间的映射。您也可以说投影是对领域事件的多种解释之一。

现在,可能需要响应与更新表无关的域事件的操作。例如,每当您收到 userLoggedIn 事件时,您可能希望向用户发送电子邮件。这就像一个简单的 if this then that 规则。这基本上就是你所说的反应。您只需以某种自定义方式对域事件做出反应

反应器(反应的组件)的结构因此与投影仪的结构非常相似。唯一的区别是反应器不会更新读取模型,而是执行任何您想要的任意操作。

换句话说:投影是一种特殊的反应,它总是关于更新读取模型。由于这很常见,因此您有一个专门的模式,但一般来说:每当您为响应接收事件而做某事时,这就是一种反应。

如果没有更多细节,如何实现反应器的问题很难回答。在wolkenkit,一个用于 JavaScript 和 Node.js 的 CQRS 和事件源框架,反应器只不过是流。流可以是stateless flowsstateful flows,具体取决于它们是否包含自己的状态。

一个简单的例子(当然是专门针对 wolkenkit 的)可能如下所示:

'use strict';

const when = {
  'userManagement.user.loggedIn' (event, mark) {
    // ...
    mark.asDone();
  }
};

module.exports = { when };

(免责声明:我是 wolkenkit 的作者之一,所以请以一粒盐为例。)

【讨论】:

    猜你喜欢
    • 2016-07-06
    • 1970-01-01
    • 2017-07-22
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多