Lagom或微服务中的异步流设计

时间:2018-07-26 15:12:22

标签: domain-driven-design microservices lagom

如何在Lagom中设计异步流?

面临的问题:在我们的产品中,我们有一个潜在客户汇总,其中包含一个用户ID(代表潜在客户的所有者),现在,用户有一个限制,即一个用户最多可以与此关联10个潜在客户。我们通过创建一个单独的服务ResourceManagement进行设计,当用户要求选择线索时,我们向LeadAggregate发送命令,该命令生成事件LeadPickRequested。在ProcessManager上,侦听事件并从ResourceManagement询问资源,在成功时,将命令发送到LeadAggregate-MarkAsPicked,然后在此向用户发送推导通知,指出已选择Lead,但是从构建UI角度来看,这非常困难,并且无法完成向第三方公开我们的API。

一个Sol。我们所做的是在服务上收到请求时,保存RequestID与Request Future。在Command中添加请求ID,并在LeadAggregate最终更改为Picked State或Picked Failure时,PM会侦听该事件,检查是否存在RequestFuture以获取请求ID,然后以正确的响应完成将来的操作。这样,它就可以作为最终用户的Sync API。

任何更好的Sol。为此

1 个答案:

答案 0 :(得分:0)

如果要提供同步API,我只会看到两个选项:

  • 设计域模型,以使login_url='https://www.life4laptop.com/index.php?route=account/login' url='https://www.life4laptop.com/index.php?route=product/search&search=samsung' list=[] driver=webdriver.Chrome(crm_path, chrome_options=options) driver.get(login_url) elem = driver.find_element_by_id("input-email") elem.clear() elem.send_keys(x['life4laptop']['username']) elem = driver.find_element_by_id("input-password") elem.clear() elem.send_keys(x['life4laptop']['password']) elem = driver.find_element_by_xpath("//form/input[@type='submit']") elem.click() driver.get(url) driver2=webdriver.Chrome(crm_path, chrome_options=options) driver2.get(login_url) elem = driver2.find_element_by_id("input-email") elem.clear() elem.send_keys(x['life4laptop']['username']) elem = driver2.find_element_by_id("input-password") elem.clear() elem.send_keys(x['life4laptop']['password']) elem = driver2.find_element_by_xpath("//form/input[@type='submit']") elem.click() driver2.get(url) #driver.close() #driver.quit() 创建逻辑,“最大10个潜在顾客”规则和用户潜在顾客列表位于同一汇总根中(提示:AR can spawn another AR )。
  • 接受在同一笔交易中涉及多个非新聚合人。

权衡取舍取决于对所讨论的聚合的交易分析-在同一笔交易中从中读取它们会导致很多锁定和竞争情况吗?