例子: 商业规则规定,当下单时客户应该收到确认消息(电子邮件或类似物)。
假设从领域中派发了一个NewOrderRegisteredEvent
,并被事件侦听器捕获以发送确认消息。在完成此操作后,某些其他事件处理程序抛出异常或其他错误导致工作单元回滚。现在我们向用户发送了一条关于已回滚的内容的确认消息。
采用"CQRS"方式如何解决这种想要在工作单元提交后执行某些操作的问题?另一个复杂因素是重放事件。我不希望在重放记录的事件以构建新视图/投影时重新发送旧的确认消息。
我目前最好的理论:我刚开始探索 CQRS 这个迷人的世界,想知道这是否会作为 saga 实现?如果 saga 就像一个状态机,每个转换只能发生一次,那么我想这就可以解决这个问题?但我很难想象这将与命令总线和领域事件结合在一起。