如何在 CQRS 中发送对命令的响应?
How to send response to a Command in CQRS?
我正在使用 Akka 持久性实现 CQRS 系统,我正在尝试了解 CQRS 的请求响应位。
SO 上关于如何将响应发送回客户端的答案很少,this article 也提到了一些好的模式。但是有人可以解释我应该如何在 CQRS 中为以下简单用例将响应发送回客户端,而不是使用大词进行概括。
用例
假设用户在显示用户个人资料的页面上显示以下信息
- 用户名
- 地址
- Phone个数
在我的系统中,每个用户都有一个 Actor,用于存储该用户的个人资料信息。
在 UI 用户想要更新地址并发生以下情况:
- 用户进行 AJAX REST 调用以更新用户地址
UpdateUserAddressCommand(address:String)
生成
UpdateUserAddressEvent(address:String)
生成
UserAddressUpdatedEvent(updatedAddress:String)
已生成(更新了 UserActor 的状态)
现在如何在系统中发回 UserProfile 的完整状态?由于 CQRS 不鼓励发送对命令的响应?
关于 CQRS 模式,REST 层可以被认为是使用 CQRS 的系统的客户端,因此您可以发送响应(从 REST 服务器到 Web 浏览器)而不会违反 "principle".
你的情况很简单:
- 对
/api/endpoint/1234
的 REST 调用 -> REST 服务器生成上述命令。
- 服务器 returns 代码“202 已接受”并将
Location:
header 设置为
像 /api/user/profile/1234
- 客户端查询
/api/user/profile/1234
以查询 UserProfile
. 的完整状态
如果你使用异步查询端 updates/eventual 一致性,你可以将 3. 与 HTTP 长轮询结合起来。
我正在使用 Akka 持久性实现 CQRS 系统,我正在尝试了解 CQRS 的请求响应位。
SO 上关于如何将响应发送回客户端的答案很少,this article 也提到了一些好的模式。但是有人可以解释我应该如何在 CQRS 中为以下简单用例将响应发送回客户端,而不是使用大词进行概括。
用例
假设用户在显示用户个人资料的页面上显示以下信息
- 用户名
- 地址
- Phone个数
在我的系统中,每个用户都有一个 Actor,用于存储该用户的个人资料信息。
在 UI 用户想要更新地址并发生以下情况:
- 用户进行 AJAX REST 调用以更新用户地址
UpdateUserAddressCommand(address:String)
生成UpdateUserAddressEvent(address:String)
生成UserAddressUpdatedEvent(updatedAddress:String)
已生成(更新了 UserActor 的状态)
现在如何在系统中发回 UserProfile 的完整状态?由于 CQRS 不鼓励发送对命令的响应?
关于 CQRS 模式,REST 层可以被认为是使用 CQRS 的系统的客户端,因此您可以发送响应(从 REST 服务器到 Web 浏览器)而不会违反 "principle".
你的情况很简单:
- 对
/api/endpoint/1234
的 REST 调用 -> REST 服务器生成上述命令。 - 服务器 returns 代码“202 已接受”并将
Location:
header 设置为 像/api/user/profile/1234
- 客户端查询
/api/user/profile/1234
以查询UserProfile
. 的完整状态
如果你使用异步查询端 updates/eventual 一致性,你可以将 3. 与 HTTP 长轮询结合起来。