如何在CQRS中向命令发送响应?

时间:2015-10-18 00:40:42

标签: cqrs akka-persistence

我正在使用Akka持久性实现CQRS系统,我正在尝试理解CQRS的请求响应位。

关于如何将响应发送回客户端的问题很少有答案,this article也提到了一些好的模式。但是,有人可以解释如何在CQRS中将响应发送回客户端以用于以下简单用例。

用例

假设用户位于显示用户个人资料的页面上,该页面显示以下信息

  1. 用户名
  2. 地址
  3. 电话号码
  4. 在我的系统中,每个用户都有一个Actor,用于存储该用户的个人资料信息。

    在UI上,用户想要更新地址,并发生以下情况:

    1. 用户进行AJAX REST调用以更新用户地址
    2. UpdateUserAddressCommand(address:String)已生成
    3. UpdateUserAddressEvent(address:String)已生成
    4. 生成
    5. UserAddressUpdatedEvent(updatedAddress:String)(UserActor的状态已更新)
    6. 现在如何在系统中发回UserProfile的完整状态?由于CQRS不鼓励发送命令的响应?

1 个答案:

答案 0 :(得分:2)

对于CQR​​S模式,REST层可以被视为使用CQRS的系统的客户端,因此您可以发送响应(从REST服务器到Web浏览器)而不违反“原则”。

在你的情况下,这很简单:

  1. REST呼叫/api/endpoint/1234 - > REST服务器按上述方式生成命令。
  2. 服务器返回代码“202 Accepted”并将Location:标头设置为 像/api/user/profile/1234
  3. 之类的东西
  4. 客户端查询/api/user/profile/1234以查询UserProfile
  5. 的完整状态

    如果使用异步查询端更新/最终一致性,则可以将3.与HTTP长轮询结合使用。