2016-10-13 76 views
1

我有一個正在運行的EvenHub,它正在被一個Windows服務監聽。意外的是,WindowsService停止工作2天。如何從EventHub中讀取停止的數據?我的Offset設置將如下所示:從指定時間讀取EventHub數據

processorOptions.InitialOffsetProvider = (partionId) => DateTime.UtcNow; 

我試圖再次啓動Windows服務,但它從現在開始。

對此有何想法?

回答

2

您是否在您的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/

http://blogs.biztalk360.com/understanding-consumer-side-of-azure-event-hubs-checkpoint-initialoffset-eventprocessorhost/

+0

'等待context.CheckpointAsync();'被定義爲特定的時間量。我通過你提供的線索解決了這個問題。現在設置一個自定義DateTime而不是Utc Date。謝謝Peter .. :) – vishnu