在回答几个问题时,Jonathan Oliver提到使用AsynchronousCommitteDispatcher来处理多个工作单元。
我仍处于项目的设计阶段(仍在学习CRQS和ES),有几个问题:
-
我会为每个将受到引发的域事件影响的聚合根创建AsynchronousCommitDispatcher吗?
-
如果我有某种锁定机制,如果被调度的事件被另一个用户锁定,则无法对聚合根进行更改,会发生什么?如果存在锁,AsynchronousCommitDispatcher是否重试?
-
如果在处理域事件之前系统发生故障,该怎么办?除非我坚持它没有被处理的事实,否则它不会丢失吗?
-
我最初的理解是,Dispatcher的类型是用于跨线传递消息或更新读取模型。在这里,我们使用它来更新另一个聚合根。我这是对的吗?
TIA-
JD
提交调度程序都是在一切都完全成功后将事件推送到连线上。不,对于给定的端点,您不需要多个调度器。AsyncCommitSchedur(使用调度程序)是多线程的,一次可以调度多个事件。
调度程序不是处理传入的消息——这就是消息处理程序的作用。一旦一切完成,调度员就会发送。
是的,调度员可以帮助更新阅读模型,但不能像你想象的那样。相反,调度器只是将消息推送到您的消息传递框架(MSMQ、RabbitMQ,或者更高级别的NServiceBus/MassTransit)中。然后,一旦在视图模型处收到消息,就相应地更新视图模型表。