Transactions Cirqus-回滚事件

Transactions Cirqus-回滚事件,transactions,event-handling,cirqus,Transactions,Event Handling,Cirqus,我们使用Cirqus作为事件存储库(在SQL Server中),但我们的视图是在RavenDb中手工制作的(通过自定义IEventDispatcher处理调度的事件) 由于某种原因,当调度事件的一个处理程序失败时,问题就会出现。在这种情况下,事件已提交到存储,但“视图”与事件存储中的内容不同步。在我们的例子中,这成为一个问题 处理这种情况并“消除”不匹配的最佳方式是什么? 注意:在分布式事务中登记整个操作(通过TransactionScope)是不可能的 我们使用的是0.41.0,如果可能的话,

我们使用Cirqus作为事件存储库(在SQL Server中),但我们的视图是在RavenDb中手工制作的(通过自定义IEventDispatcher处理调度的事件)

由于某种原因,当调度事件的一个处理程序失败时,问题就会出现。在这种情况下,事件已提交到存储,但“视图”与事件存储中的内容不同步。在我们的例子中,这成为一个问题

处理这种情况并“消除”不匹配的最佳方式是什么? 注意:在分布式事务中登记整个操作(通过TransactionScope)是不可能的


我们使用的是0.41.0,如果可能的话,我们希望避免更新。

我喜欢你说你不想在事务中登记所有内容-这两个原因都是因为不可能做到这一点,但主要是因为我认为这没有意义

在我看来,域不应该依赖任何视图的能力来追赶。我认为您当然应该非常小心地编写视图,这样它们就不会失败,但如果其中一个视图失败,它所能做的最好的事情就是将其记录为错误(或者告知它已失败)并停止处理事件

Cirqus的开箱即用视图管理器(那些由
ViewManagerReventDispatcher
托管的视图管理器)处理此问题的方法只是在发生故障时停止事件处理。然后,如果故障是暂时的,视图将在故障结束后自动恢复处理事件

这样,视图将永远不会错过处理任何事件。但是你可能应该小心地写下你的观点,这样他们就不太可能失败