如果我们在投影后触发事件有什么缺点?

What drawbacks are there if we fire events after projection?

一些项目背景 - 仅供参考

在我们的系统中,我们对 Cucumber 使用了一些验收测试。在测试运行中,我们使用完全设置的微服务系统(本地机器)。事件源由 Axon Event Store 管理。

场景

我们将命令应用于聚合和触发业务事件。投影是作为事件处理程序实现的。 其他服务正在侦听业务事件并读取写入的数据 (REST)。

我们这样做是为了让我们的活动规模较小。

为了克服业务事件和投影之间的最终一致性期,而读取发生在其他服务中,我们的黄瓜步骤中有很多语句,例如

Thread.sleep(5000L);

但睡眠值取决于底层硬件的性能指标。所以测试很脆弱。

问题 在投影写入数据后是否可以选择触发事件?这样我们就可以保证真实性的读取数据了。

为了同步您的读取模型而触发事件(通过您的领域层)对我来说听起来有点过分。我建议您可以订阅您的阅读模型并在同步时收到通知。我们已经实现了与 STOMP 类似的东西。

在我们的例子中,我们的前端订阅了用户购物车并为其接收更新。

编辑:

当然您也可以使用 axon-servers 查询总线。如果你买不起一个完整的集群,你仍然可以将你的事件存储在别处(jpa,jdbc,mongodb)并配置你的查询总线以使用 axon-server 的免费标准版。