Events ES、CQRS消息传递流
我试图理解ES+CQR和技术堆栈可以使用。 根据我的理解,流程应如下所示Events ES、CQRS消息传递流,events,architecture,rabbitmq,cqrs,event-sourcing,Events,Architecture,Rabbitmq,Cqrs,Event Sourcing,我试图理解ES+CQR和技术堆栈可以使用。 根据我的理解,流程应如下所示 UI向控制器(HTTP适配器)发送请求 控制器通过将请求对象作为参数传递来调用应用程序服务 应用程序服务从控制器传递的请求对象创建命令 应用程序服务将此命令传递给消息使用者 消息使用者向消息代理发布命令(RabbitMQ) 两个用户将监听上述命令 A.一个订阅服务器将使用命令从eventStore生成聚合 并将应用命令,生成的事件将存储在事件存储中。 B另一个订阅服务器将位于视图端,它将填充视图数据库/缓存中的数据 请告知
这就是最终一致性部分的用武之地。如果成功写入事件存储,我们承诺写入的效果将在有限的时间内可见。我仍然不确定。在事件存储中写入数据和在视图模型中写入数据是如何实现原子性的。我在Write Model CommandHanders的博客/文章中看到的内容是执行以下步骤。1.根据命令2从事件存储中获取事件。使用事件3创建聚合。Apply命令,该命令为该聚合4生成事件。这些事件都是一场灾难。保存在事件存储b中。事件被发送到消息队列中以供读取模型使用现在a、b步骤不是原子的,如果事件存储在EventStrore中,但系统在发送消息队列中的事件之前崩溃,我们该如何处理。从事件被持久化到它被添加到队列中的时间在大多数情况下是以低毫秒为单位测量的。因此,这种情况极不可能发生。但如果是这样的话,聚合和读取模型的版本号将被删除。只需重播自上次读取模型更新以来的事件。你可能会发现我的文章概述了一个典型的CQS ES体系结构,这很有帮助:@Nishat some event