我们使用Cirqus作为事件存储库(在SQL Server中),但我们的视图是手工制作的(通过自定义IEventDispatcher处理调度事件)在RavenDb中。
由于某种原因,调度事件的处理程序之一失败时会出现问题。在那种情况下,事件已被提交到商店,但“视图”与事件存储中的内容不同步。在我们的例子中,这成了一个问题。
处理这种情况并“摆脱”不匹配的最佳方法是什么? 注意:不可能在分布式事务中(通过TransactionScope)登记整个操作。
我们使用的是0.41.0,如果可能,我们希望避免更新。
答案 0 :(得分:0)
我喜欢你说你不想在交易中招募所有东西 - 因为它不可能做到这一点,但主要是因为我认为它没有意义。
在我看来,域名不应该依赖于任何观点。赶上的能力。我认为你当然应该非常小心地编写视图以便它们不会失败,但是如果其中一个视图应该失败,那么它能做的最好的事情就是将它记录为错误(或者以其他方式传达它已经失败了)并停止处理事件。
Cirqus'处理这种方式的方式开箱即用的视图管理器(由ViewManagerEventDispatcher
托管的)只需在发生故障时停止事件处理。然后,如果故障是暂时的,那么当故障结束时,视图将自动恢复处理事件。
这样,视图将永远不会错过处理任何事件。但是你应该小心地写下你的观点,以便他们不太可能失败。