问题标签 [event-sourcing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
301 浏览

domain-driven-design - 具有 CQRS 和 EventSourcing 的灵活实体模型

引用Rinat Abdullin 的文章

CQRS 和事件溯源还简化了具有各种自定义字段和属性的灵活实体模型的实现,这些自定义字段和属性通常在运行时定义并由最终用户在布局和拖放设计器中使用。

我不明白如何使用事件溯源和 cqrs 来定义运行时自定义字段?

0 投票
3 回答
14709 浏览

java - CQRS 和 EventSourcing 的框架建议

除了Axon 框架之外,还有其他用于 CQRS 和事件溯源的 Java 框架吗?我专门找

  1. 基于Java的框架。
  2. 必须支持事件溯源。
0 投票
5 回答
589 浏览

cqrs - CQRS 是否与事件溯源相关联?

我最近阅读了很多关于 CQRS 的内容,对我来说,它似乎与事件溯源密切相关。

但是就像这个答案所说的https://stackoverflow.com/a/9217461/277067 对我来说,事件源对于像我这样的初学者来说似乎有点过于复杂/可怕(“什么?我的对象当前状态不会存储在任何地方??”) .

所以我想知道他们是否确实被捆绑了,或者是否有任何工具/名声可以帮助在没有事件采购的复杂部分的情况下进行 cqrs(事件观察者、命令处理程序)。

谢谢

0 投票
1 回答
1712 浏览

publish-subscribe - CQRS + 事件溯源:(是否正确)命令通常是点对点通信的,而域事件是通过 pub/sub 通信的?

不知道如何缩短该标题。

我基本上是在尝试围绕 CQRS (http://en.wikipedia.org/wiki/Command-query_separation) 和相关概念的概念。

尽管 CQRS 不一定包含消息传递和事件溯源,但它似乎是一个很好的组合(从结合这些概念的许多示例/博客文章中可以看出)

给定某事物状态更改的用例(比如更新关于 SO 的问题),您是否认为以下流程是正确的(如最佳实践)?

  • 系统发出一个聚合 UpdateQuestionCommand,它可能被分成几个较小的命令:针对问题聚合根的 UpdateQuestion 和针对用户聚合根的 UpdateUserAction(用于计数点等)。这些是使用点对点消息异步发送的。

  • 聚合根做他们的事情,如果一切顺利,分别触发事件 QuestionUpdated 和 UserActionUpdated,其中包含外包给事件存储的状态.. 要持久化 yadayada,只是为了完整,这里不是重点。

  • 这些事件也被放在发布/订阅队列中进行广播。任何订阅者(其中可能是一个或多个创建读取视图的投影仪)都可以自由订阅这些事件。

一般问题:确实是最佳实践,命令是点对点的(即:接收者是已知的)而事件是广播的(即:接收者是未知的)?

假设上述情况,允许通过 pub/sub 而不是点对点广播命令的优点/缺点是什么?

例如:在使用 Saga (http://blog.jonathanoliver.com/2010/09/cqrs-sagas-with-event-sourcing-part-i-of-ii/) 时广播命令可能会出现问题,因为Saga 在其中一个聚合根失败的情况下需要发挥的中介作用受到阻碍,因为 saga 不知道从哪个聚合根开始参与。

另一方面,我看到了允许广播命令的优势(灵活性)。

非常感谢任何帮助我清理头脑的帮助。

0 投票
1 回答
304 浏览

dart - Dart 的 EventSource 错误

我正在尝试将 EventSource 与 Dart 一起使用。

消息很受欢迎,但总是打印“错误”。如何获得有关此错误的更多信息?我尝试使用 ErrorEvent 而不是 Event 但它失败了,因为这个事件不是 ErrorEvent

0 投票
1 回答
446 浏览

nservicebus - 从高层使用 NServiceBus 和 EventStore

因此,我一直在阅读有关 EventStore 和 NServiceBus 的信息,并且我喜欢拥有我的数据的事务日志的想法,它可以帮助我基于该数据构建视图。

我现在不明白的是如何区分将写入您的读取存储的事件和可能触发发送电子邮件的相同事件。

前任。创建客户

我是否应该使用 CreatedUserEvent 来触发我对数据存储的写入和向用户发送电子邮件?

0 投票
2 回答
2354 浏览

cqrs - 事件溯源命令或来自外部系统的事件?

在大多数情况下,我理解 CQRS + ES 系统中命令和事件之间的区别。但是,有一种情况我无法弄清楚。

假设我正在构建一个个人财务跟踪系统,用户可以在其中输入借项/贷项。显然,这些是命令,一旦它们被验证,域模型就会更新并发布一个事件。然而,假设贷记/借记信息也直接来自外部系统,例如,用户的花店发送一条消息,说明他已经从用户的信用卡中收取了他经常性的母亲节递送费用。在这种情况下,消息看起来像是一个事件(收费已经发生),但消息可能格式不正确并被拒绝。那么它真的是一个命令吗?但随后需要一种发送 ACK/NACK 的方法,但这里不是这种情况(花店只有在知道借记发生后才发送消息)。

编辑:澄清一下,我不是在谈论外部系统对我的事件和/或命令一无所知。我有一个组件从外部系统接收数据,然后必须发布事件或发送命令。问题是,我的组件应该使用哪个事件或命令?

0 投票
2 回答
397 浏览

nservicebus - EDA:“级联”事件还是显式命令?

设想

假设我有一个系统的三个主要组件:

  1. UI - 收集来自用户的输入并创建通过消息总线发送的LoginUserCommand 。然后,用户界面侦听此消息总线以获取MessageReceivedEvent(s)

  2. 用户服务- 接收LoginUserCommand并引发UserLoggedInEvent。这里的关键部分是消息服务需要被告知开始接收消息。

  3. 消息服务-为登录用户引发MessageReceivedEvent(s) 。

选项

我的设计问题是关于User ServiceMessage Service之间的交互。

当用户登录时,需要发生许多事情——服务需要协调,以便 UI 开始接收消息。

我是不是该...

  • 用户服务是否引发了UserLoggedInEvent并让消息服务监听此事件并执行用户接收消息所需的工作?

...或者...

  • 用户服务是否引发了一个UserLoggedInEvent但然后创建一个命令 - StartMessageReceivingCommand并将其显式发送到消息服务

问题

每种方法的优点/缺点是什么?(级联事件与显式命令)。还有其他选择吗?

0 投票
2 回答
6254 浏览

java - EventSource 中的错误处理

我正在尝试制作一个使用 EvenSource 对象(在 javascript 中)来制作服务器发送事件(彗星)的页面。我阅读了很多关于它的教程,但没有找到解释以下问题的教程:

  1. 当我订阅 EventSource 的“onerror”事件时 - 我得到的参数类型是什么?我怎么知道究竟是什么错误?

  2. 我知道 EvenSource 有一个就绪状态,它的变化取决于浏览器。为什么每次“onmessage”事件发生后我的 readystate 都变为 0?(我使用铬)。

  3. 我如何证明我与服务器的连接保持连接而不是每次都重新连接?

浏览器:铬。

服务器端:Java(如果相关,我制作的示例在 Java EE 预览版中。但我将在 WebLogic 10R3 上工作。

在我的示例中发生的情况是数据正在从服务器发送到客户端,然后发生“onerror”事件(readystate 为 0),3 秒后(chrome 的默认值)它重新连接并再次发送数据。

javascript代码:

Java 代码:

如果还有什么你想知道的——告诉我。希望你能帮助我。

谢谢!

0 投票
4 回答
8619 浏览

cqrs - CQRS 事件存储的结构

我目前正在尝试了解如何构建事件存储的内部结构。到目前为止我得到了什么:

  • 一个事件存储有两个表(集合,...),一个用于聚合,一个用于事件。
  • 聚合表包含以下数据:(aggregateId可能是一个 GUID)和aggregateVersion(它是一个整数,仅表示影响此聚合的最后一个事件的数量)。
  • events 表包含以下数据:(eventId同样是一个 GUID)、aggregateId(事件所属的)payload、 和 a version(它是一个简单的整数,用于描述事件的顺序)。

到目前为止这是正确的吗?是否应该使用整数对事件进行排序?还是应该根据时间戳对它们进行排序?各有什么优势?有什么缺点?