不知道如何缩短标题。

我基本上是想围绕CQRS(http://en.wikipedia.org/wiki/Command-query_separation)和相关概念的概念。

尽管CQRS不一定包含消息传递和事件源,但它似乎是一个很好的组合(从结合了这些概念的许多示例/博客中可以看出)

给定一个用于某种情况的状态更改的用例(例如,更新有关SO的问题),您是否认为以下流程是正确的(如最佳实践中那样)?

  • 系统发出聚合的UpdateQuestionCommand,可以将其拆分为几个较小的命令:以Question Aggregate Root为目标的UpdateQuestion和以User Aggregate Root为目标的UpdateUserAction(对点进行计数)。这些是使用点对点消息传递异步发送的。
  • 聚合根在做它们的事情,如果一切顺利,则分别触发事件QuestionUpdated和UserActionUpdated,它们包含外包给事件存储的状态。要保留yadayada,只是为了完整起见,此处并不是重点。
  • 这些事件也放在发布/订阅队列中以进行广播。任何订阅者(其中可能有一个或多个创建阅读 View 的投影仪)都可以自由订阅这些事件。

  • 一般问题:最佳实践是点对点通信(即:接收方是已知的),而广播事件(即:接收方是未知的)吗?

    假设以上所述,允许通过pub/sub而不是点对点广播命令的优点/缺点是什么?

    例如:使用Saga(http://blog.jonathanoliver.com/2010/09/cqrs-sagas-with-event-sourcing-part-i-of-ii/)广播命令时可能会出现问题,因为万一某个总根发生故障时,佐贺需要扮演的中介角色受到了阻碍,因为该佐贺不知道从哪个总根开始参与。

    另一方面,我看到允许广播命令时的优点(灵活性)。

    非常感谢您对清除我的头部的任何帮助。

    最佳答案

    是的,对于“命令”或“查询”,只有一个接收器,而只有一个接收器(因此您仍然可以进行负载平衡),但是对于“事件”,可能有零个或多个接收器(订阅者)

    09-10 04:22
    查看更多