2015-11-23 9 views
1

Мы используем EventProcessorHost для получения событий от Azure EventHubs. Я безуспешно пытался настроить его (через EventProcessorOptions.InitialOffsetProvider) для чтения событий с UTC, но он всегда читается с самого начала фида. Я не сохраняю контрольные точки (и даже удалил созданный контейнер BLOB). Это, как я устанавливаю его:Как настроить EventProcessorHost для чтения событий с этого момента (UTC)?

DateTime startDate = DateTime.UtcNow; 

var epo = new EventProcessorOptions 
      { 
       MaxBatchSize = 100, 
       PrefetchCount = 100, 
       ReceiveTimeOut = TimeSpan.FromSeconds(120), 
       InitialOffsetProvider = (name) => startDate 
      }; 

Любое руководство будет оценено.

+0

Я так давно не использовал EventHub, но я пропустил демонстрации Azure Connect the Dots на GitHub, и в их демонстрациях они не объявляют переменную, как вы. У них есть встроенный UtcNow. например: InitialOffsetProvider = (имя) => DateTime.UtcNow https://github.com/Azure/connectthedots/blob/master/Azure/WebSite/ConnectTheDotsWebSite/Global.asax.cs – jdruid

ответ

5

Я обнаружил, что папка контрольной точки в блобе все еще была там, и мое приложение рассматривало это и игнорировало дату, установленную в EventProcessorOptions. После того, как я удалил контейнер, он начал работать как ожидалось (принимая во внимание дату UTC).

2

Для этого можно использовать класс EventProcessorOptions и установить смещение в нужное время.

var eventProcessorOptions = new EventProcessorOptions 
{ 
    InitialOffsetProvider = (partitionId) => DateTime.UtcNow 
}; 

Вы можете использовать любого из RegisterEventProcessAsync перегрузок воспринмаемых eventProcessorOptions.