2017-04-16 15 views
0

我們目前正在將Azure事件中心視爲一種將郵件分派到後臺處理器的機制。目前正在使用基於隊列的系統。Azure事件中心 - 具有SQL檢查點的自定義使用者

大多數處理器正在將數據寫入SQL Server數據庫,並且寫入操作被封裝在事務中。

事件集線器被定位爲在-至少一次通信信道,因此重複的消息應可預期的。 EventProcessorHost是讀取端的推薦API,它使用Azure Blob存儲自動進行租賃管理和檢查點設置。

但我們有一個想法,對於一些最關鍵的處理器,實現使用同一數據庫內SQL Server表檢查點自己,寫處理器的相同事務內部檢查點。這應該在需要時爲我們提供一次交貨的有力保證。

忽略租賃管理,現在(只是運行每個分區1個處理器),是基於SQL的檢查點是一個好主意?除了需要在較低級別的API上工作並自己處理檢查點之外,是否還有其他缺點?

回答

1

Azure存儲是內置解決方案,但我們不受此限制。如果大多數處理器正在將數據寫入SQL Server數據庫,並且您不希望在Azure存儲(需要存儲帳戶)中存儲EventProcessorHost存儲檢查點,那麼在我看來,將檢查點存儲在SQL數據庫中,這些檢查點提供了一種簡單的方法處理事件並以事務方式管理檢查點,這將是一個很好的解決方案。

你可以使用ICheckpointManager interface在你的SQL數據庫中存儲的檢查點寫自己的檢查站經理。

+0

感謝yu Fred。如果我實現了這個接口,我將能夠重用EventProcessorHost的其他部分嗎?或者自定義代碼有什麼好處?任何相關樣本在線? – Mikhail

0

根據Fred的建議,我們基於SQL Server中的表實現了自己的Checkpoint Manager。你可以找到代碼示例here

這很好地執行插入EventProcessorHost。我們還必須實施ILeaseManager,因爲它們在默認實現中高度耦合。

my blog post我描述我對這種基於SQL的執行動機,以及整體解決方案的高級視圖。

相關問題