在我们的项目中,我们使用基于订阅的预测。原因是:
考虑到这些原因,我们有基于订阅的单线程投影,可以做任何事情。您可以使用自己的检查点执行不同类型的投影,使用追赶订阅订阅事件存储。为了简单起见,我们将它们与许多其他东西一样托管在同一个进程中,但这个过程只能在一台机器上运行。如果我们想要横向扩展这个过程,我们将不得不接受订阅/预测。它可以很容易地完成,因为除了读取模型DTO本身之外,这部分几乎没有其他模块的依赖性,无论如何它都可以作为程序集共享。
通过使用订阅,您始终可以预测已提交的事件。如果投影出现问题,写入方面肯定是事实的来源并且仍然如此,您只需要修复投影并再次运行它。
我们有两个独立的 - 一个用于投影到读模型,另一个用于将事件发布到消息总线。事实证明,这种结构非常有效。
特别是对于EventStore,他们现在有 竞争消费者 ,这是基于服务器的订阅,其中许多客户端可以订阅订阅组,但只有一个客户端获取该消息。
这听起来就像你所追求的那样,服务器场中的每个节点都可以订阅订阅组,接收消息的节点可以进行投影