如果我们在投影后触发事件有什么缺点?
What drawbacks are there if we fire events after projection?
一些项目背景 - 仅供参考
在我们的系统中,我们对 Cucumber 使用了一些验收测试。在测试运行中,我们使用完全设置的微服务系统(本地机器)。事件源由 Axon Event Store 管理。
场景
我们将命令应用于聚合和触发业务事件。投影是作为事件处理程序实现的。
其他服务正在侦听业务事件并读取写入的数据 (REST)。
我们这样做是为了让我们的活动规模较小。
为了克服业务事件和投影之间的最终一致性期,而读取发生在其他服务中,我们的黄瓜步骤中有很多语句,例如
Thread.sleep(5000L);
但睡眠值取决于底层硬件的性能指标。所以测试很脆弱。
问题
在投影写入数据后是否可以选择触发事件?这样我们就可以保证真实性的读取数据了。
为了同步您的读取模型而触发事件(通过您的领域层)对我来说听起来有点过分。我建议您可以订阅您的阅读模型并在同步时收到通知。我们已经实现了与 STOMP 类似的东西。
在我们的例子中,我们的前端订阅了用户购物车并为其接收更新。
编辑:
当然您也可以使用 axon-server
s 查询总线。如果你买不起一个完整的集群,你仍然可以将你的事件存储在别处(jpa,jdbc,mongodb)并配置你的查询总线以使用 axon-server
的免费标准版。
一些项目背景 - 仅供参考
在我们的系统中,我们对 Cucumber 使用了一些验收测试。在测试运行中,我们使用完全设置的微服务系统(本地机器)。事件源由 Axon Event Store 管理。
场景
我们将命令应用于聚合和触发业务事件。投影是作为事件处理程序实现的。 其他服务正在侦听业务事件并读取写入的数据 (REST)。
我们这样做是为了让我们的活动规模较小。
为了克服业务事件和投影之间的最终一致性期,而读取发生在其他服务中,我们的黄瓜步骤中有很多语句,例如
Thread.sleep(5000L);
但睡眠值取决于底层硬件的性能指标。所以测试很脆弱。
问题 在投影写入数据后是否可以选择触发事件?这样我们就可以保证真实性的读取数据了。
为了同步您的读取模型而触发事件(通过您的领域层)对我来说听起来有点过分。我建议您可以订阅您的阅读模型并在同步时收到通知。我们已经实现了与 STOMP 类似的东西。
在我们的例子中,我们的前端订阅了用户购物车并为其接收更新。
编辑:
当然您也可以使用 axon-server
s 查询总线。如果你买不起一个完整的集群,你仍然可以将你的事件存储在别处(jpa,jdbc,mongodb)并配置你的查询总线以使用 axon-server
的免费标准版。