如何在Lagom设计asyn流量?
面临的问题:在我们的产品中,我们有一个Lead Aggregate,它有一个用户ID(代表潜在客户的所有者),现在用户有一个限制,即一个用户最多可以有10个与之相关的潜在客户 . 我们通过创建单独的Service ResourceManagement来设计它,当用户请求挑选潜在客户时,我们向LeadAggregate发送一个命令,生成事件LeadPickRequested . 在ProcessManager上听取事件并询问资源来自资源管理,在成功发送命令到LeadAggregate - MarkAsPicked并在此发送推送通知给用户领导被挑选但是从构建UI角度来看,它非常困难且同样不能做到将我们的API暴露给第三方 .
一个Sol . 我们已经完成的是在服务上收到请求时保存RequestID和请求期限 . 在命令中添加请求ID,当LeadAggregate最终更改为Picked State或Picked Failure时,PM听取事件,检查RequestFuture是否存在请求ID,然后用正确的响应完成将来 . 这样它就可以作为最终用户的Sync API .
任何更好的溶胶 . 为了这
1 回答
如果要提供同步API,我只看到两个选项:
设计您的域模型,以便
Lead
创建逻辑,"10 leads max"规则和用户的潜在客户列表位于同一聚合根目录中(提示:AR can spawn another AR) .接受在同一事务中涉及多个非新聚合 .
权衡取决于对相关聚合的交易分析 - 在同一交易中从他们那里读取会导致很多锁定和竞争条件吗?