在CQRS中如何使用NServiceBus来更新命令和查询存储

本文关键字:命令 更新 查询 存储 NServiceBus CQRS 何使用 | 更新日期: 2023-09-27 18:17:54

在CQRS中,如何确保命令处理程序以事务方式更新写存储和读存储?

我不确定这两个步骤是否应该是一个事务?还是你依赖于最终的一致性?意味着读存储最终会更新?

使用NServiceBus 5或6的常见方法是什么?

在我们的应用程序中,我们有IRepository<T> (Add, Update)作为命令端来更新Sql Server数据库。查询端很简单。实体框架DbContext之上的数据库和facade。

命令端的步骤如下:

  1. MVC控制器接收来自View的数据
  2. 控制器动作创建一个Command/Message对象并将其发送到总线。
  3. 适当的命令处理程序创建适当的域对象并对其进行验证。
  4. 如果有效,使用IRepository插入或更新数据库。
  5. 现在什么?

这是否必须是NServiceBus中的Saga,其中步骤1和2更新命令存储和读取存储?

谢谢。

在CQRS中如何使用NServiceBus来更新命令和查询存储

我看到的流程如下:

  • 控制器接收到一个动作并在命令总线中发出一个命令
  • 正确的命令处理程序被触发,写模型得到更新
  • 在命令处理程序中,触发事件
  • 正确的事件处理程序被触发,读取模型得到更新

所以更新读模型是在事件处理程序中完成的-因此最终的一致性

希望这对你有帮助!祝你好运!