2016-10-13 12 views
1

У меня есть работающий EvenHub, который прослушивается службой Windows. Случайно, WindowsService перестала работать в течение 2 дней. Как я могу прочитать данные EventHub, где он остановился? Моя настройка OffSet будет выглядеть так:Чтение данных EventHub с указанного времени

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

Я попытался запустить сервис Windows снова, но его начало отныне.

Любая идея для этого?

ответ

2

Вы когда-нибудь звонили 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. Спасибо, Питер .. :) – vishnu