簡體   English   中英

Azure事件中心-具有SQL檢查點的自定義使用者

[英]Azure Event Hubs - custom consumer with SQL checkpoints

我們目前正在將Azure Event Hubs視為一種將消息分發到后台處理器的機制。 目前正在使用基於隊列的系統。

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

事件中心被定位為至少一次的通信通道,因此應該期望消息重復。 建議在讀取端使用EventProcessorHost API,該API使用Azure Blob存儲自動執行租約管理和檢查點。

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

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

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

您可以使用ICheckpointManager接口編寫自己的檢查點管理器,以將檢查點存儲在SQL數據庫中。

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

這個實現很好地插入了EventProcessorHost 我們還必須實現ILeaseManager ,因為它們在默認實現中高度耦合。

我的博客文章中,我描述了實現基於SQL的實現的動機以及整個解決方案的高級視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM