我有一個正在運行的EvenHub,它正在被一個Windows服務監聽。意外的是,WindowsService停止工作2天。如何從EventHub中讀取停止的數據?我的Offset設置將如下所示:從指定時間讀取EventHub數據
processorOptions.InitialOffsetProvider = (partionId) => DateTime.UtcNow;
我試圖再次啓動Windows服務,但它從現在開始。
對此有何想法?
我有一個正在運行的EvenHub,它正在被一個Windows服務監聽。意外的是,WindowsService停止工作2天。如何從EventHub中讀取停止的數據?我的Offset設置將如下所示:從指定時間讀取EventHub數據
processorOptions.InitialOffsetProvider = (partionId) => DateTime.UtcNow;
我試圖再次啓動Windows服務,但它從現在開始。
對此有何想法?
您是否在您的EventProcessor
中撥打await context.CheckpointAsync();
?如果沒有,您將無法輕鬆完成此操作。通常,EventProcessor
會跟蹤哪些項目已處理。您可以在EventProcessor
處理一段時間後,或者處理了一些項目後,撥打await context.CheckpointAsync();
來完成此操作。
使用
processorOptions.InitialOffsetProvider = (partionId) => DateTime.UtcNow;
你基本上告訴EventProcessor
忽略之前,現在已經到達的所有項目。這不是你需要的。如果您在處理代碼中調用await context.CheckpointAsync();
,則將刪除此呼叫並且它將恢復處理尚未處理的項目。如果沒有檢查點可用,它將從流的開始處開始,具體取決於配置的保留。然後您必須手動跳過您可能已經處理的項目。
一些背景讀數:
understanding check pointing in eventhub
https://blogs.msdn.microsoft.com/servicebus/2015/01/16/event-processor-host-best-practices-part-1/
'等待context.CheckpointAsync();'被定義爲特定的時間量。我通過你提供的線索解決了這個問題。現在設置一個自定義DateTime而不是Utc Date。謝謝Peter .. :) – vishnu