0

在对几个问题的回复中,Jonathan Oliver 提到使用 AsynchronousCommitDispatcher 来处理多个工作单元。

我还处于项目的设计阶段(还在学习 CRQS 和 ES),有几个问题:

  1. 我会为每个将受引发域事件影响的聚合根创建一个 AsynchronousCommitDispatcher 吗?

  2. 如果我有某种锁定机制,如果调度的事件被另一个用户锁定,它不能对聚合根进行更改,会发生什么?如果有锁,AsynchronousCommitDispatcher 会重试吗?

  3. 如果系统在处理域事件之前出现故障怎么办?除非我坚持它没有被处理,否则它不会丢失吗?

  4. 我最初的理解是 Dispatchers 的类型是用于通过网络传递消息或用于更新读取模型。在这里,我们使用它来更新另一个聚合根。我这个对吗?

TIA

京东

4

1 回答 1

2

提交调度程序都是在一切都完全成功之后将事件推送到线路上。不,对于给定的端点,您不需要多个调度程序。AsyncCommitScheduler(使用调度程序)是多线程的,一次可以调度多个事件。

调度程序不是处理传入的消息——这就是您的消息处理程序的用途。调度员只会在一切完成后发送。

是的,调度员可以帮助更新读取模型,但不是按照您的想法。相反,调度程序只是将消息推送到您的消息传递框架(MSMQ、RabbitMQ 或更高级别的 NServiceBus/MassTransit)中。然后,一旦您的视图模型收到一条消息,您就会相应地更新您的视图模型表。

于 2012-01-18T02:32:55.733 回答