EventStore和多个工作单元?

时间:2012-01-16 11:24:03

标签: cqrs event-store

在对few questions的回复中,Jonathon Oliver提到使用AsynchronousCommitDispatcher处理多个工作单元。

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

1)我是否会为每个聚合根创建一个AsynchronousCommitDispatcher,它将受到被引发的域事件的影响?

2)如果我有某种锁定机制,如果被调度的事件被另一个用户锁定,则无法对聚合根进行更改,会发生什么?如果存在锁定,AsynchronousCommitDispatcher是否会重试?

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

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

TIA

JD

1 个答案:

答案 0 :(得分:2)

提交调度程序都是在完成所有内容后将事件推送到上。不,您不需要为给定端点使用多个调度程序。 AsyncCommitScheduler(使用调度程序)是多线程的,可以一次调度多个事件。

调度程序与处理传入消息无关 - 这就是消息处理程序的用途。一旦一切都完成,调度员就会发送。

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