我们是否需要在CQRS中混合使用同步和异步命令处理程序?

时间:2010-09-15 15:31:27

标签: cqrs

  1. 用户在我们的网站上注册并登录。将RegsiterUserCommand发送给异步命令处理程序。
  2. 用户想要更改其地址,但尚未处理RegisterUserCommand。系统中没有用户记录。
  3. 这是同步命令处理程序的情况吗?将在验证用户之前创建用户记录。或者我应该在注册后重新考虑对真实用户的要求吗?在创建帐户之前,用户将无法访问该网站。如果用户无法立即访问系统,则可能会降低使用率。

    在CQRS系统中看到混合使用同步和异步命令处理程序是否常见?

1 个答案:

答案 0 :(得分:8)

我有所有在异步中运行的内容。为了保持一切简单,队列是FIFO;另外每个分区有一个处理线程。这样,命令始终按发送顺序处理。此外,我们仍然具有可扩展性,因为每个分区的线程可以简单地转换为每个分区的计算机,而无需重新分配整个解决方案。

在某些情况下,我们可能需要进行同步处理(在我的例子中,示例是初始用户注册,因为我们需要先验证服务器上的一些内容,然后再让他继续)。在这种情况下,发送命令后,用户将显示“请等待几秒钟,同时处理您的注册”。一旦确认(或失败)注册,用户就会自动进入下一个屏幕。这与Web UI中的AJAX无关。桌面用户界面甚至更简单。