2015-03-13 23 views
1

我們使用Cirqus作爲事件存儲庫(在SQL Server中),但我們的視圖是在RavenDb中手工製作(通過自定義IEventDispatcher處理調度的事件)。Cirqus - 回滾事件

由於某種原因,派發事件的一個處理程序失敗時出現問題。在這種情況下,該事件已被提交到商店,但「意見」與事件商店中的內容不同步。在我們的情況下,這成爲一個問題。

處理這種情況並「擺脫」不匹配的最佳方式是什麼? 注意:在分佈式事務內部(通過TransactionScope)徵用整個操作不是可能的。

我們使用0.41.0,如果可能,我們希望避免更新。

回答

0

我喜歡你說你不想在交易中登記所有東西 - 這是因爲它不容易做到這一點,但主要是因爲我認爲它不合理。

正如我所看到的,域名不應該依賴任何觀點的追趕能力。我認爲你當然應該非常小心地編寫視圖,以便它們不會失敗,但是如果其中一個視圖應該失敗,它所能做的最好的事情就是將其記錄爲錯誤(或者以其他方式進行通信已經失敗)並停止處理事件。

Cirqus的開箱視圖管理器(由ViewManagerEventDispatcher託管的視圖管理器)的處理方式就是在發生故障時停止事件處理。然後,如果故障是暫時的,則視圖將在故障結束時自動恢復處理事件。

這樣,視圖就不會錯過處理任何事件。但是,你應該小心地寫下你的觀點,以便他們不太可能失敗。