Рабочая роль - EventProcessorHost CheckPoint кажется причиной 409 Конфликт хранилища Azure
У меня есть облачный сервис и концентратор событий с 2 разделами. Моя облачная служба - это рабочая роль, которая записывает данные в хранилище Azure. Он записывает все сообщения, полученные от концентратора событий.
С эмулятором Azure моя рабочая роль работает нормально, она пишет в хранилище Azure в производственном режиме (не в dev, поэтому это то же хранилище Azure).
Когда я перенес свою рабочую роль в облачную службу, я получаю такую ошибку от Application Insight (100% успешного вызова: false). С журналами IntelliTrace я получил конфликт 409.
Я попытался выполнить удаленную отладку, но она настолько медленная, что мне понадобится меньше времени, чтобы переписать мой код, чем ждать "следующего шага"...
Я удалил все управление арендой в моем коде, и ничего не изменилось...
Я твердо верю, что это связано с проблемой контрольно-пропускного пункта..
_host = new EventProcessorHost(Environment.MachineName, eventHubName, consumerGroupName, eventHubConnectionString, checkpointConnectionString);
Я использую мою контрольную точку в этом методе (в моем HandledEventProcessor)
public async Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> events)
{
try
{
foreach (EventData eventData in events)
{
var eventName = eventData.GetEventName();
var handlers = _handlerFactory.GetHandlers(eventName);
if (handlers.Any())
{
foreach (var handler in handlers)
{
SafelyHandleEvent(handler, eventName, eventData, context);
}
}
else
{
_log.WarnEvent("NoEventHandlers",
new Facet { Name = "eventName", Value = eventName });
}
}
await context.CheckpointAsync(); <--- Checkpoint here
}
catch (Exception ex)
{
_log.ErrorEvent("ProcessEventsFailed", ex,
new Facet { Name = "eventCount", Value = events.Count() },
new Facet { Name = "eventHubPath", Value = context.EventHubPath },
new Facet { Name = "partitionId", Value = context.Lease.PartitionId });
}
}
Журналы Application Insight
23/4/2016 10:35:01 - ЗАВИСИМОСТЬ BLOB-объекта Azure: myblobStorage/myContainer Продолжительность зависимости: 2,84 мс Успешный вызов: ложный URL: https: //****.blob.core.windows.net: 443 / myContainer / myConsumerGroupName / partition1
23/4/2016 10:35:01 - ЗАВИСИМОСТЬ BLOB-объекта Azure: myblobStorage/myContainer Продолжительность зависимости: 2,84 мс Успешный вызов: ложный URL: https: //****.blob.core.windows.net: 443 / myContainer / myConsumerGroupName / partition0
23/4/2016 10:34:59 - ЗАВИСИМОСТЬ BLOB-объекта Azure: myblobStorage/myContainer Продолжительность зависимости: 4,4 мс Успешный вызов: falseURL: https://****.blob.core.windows.net:443/myContainer/myConsumerGroupName/1? = Comp аренда и тайм-аут =10
23/4/2016 10:34:59 - ЗАВИСИМОСТЬ BLOB-объекта Azure: myblobStorage/myContainer Продолжительность зависимости: 4,4 мс Успешный вызов: falseURL: https://****.blob.core.windows.net:443/myContainer/myConsumerGroupName/0? Comp= аренда и таймаут =10
Я не уловил это... Если у кого-то есть идея, это очень приветствуется...
Любая помощь будет оценена.
1 ответ
Я добавил таймер перед вызовом await context.CheckpointAsync();
Я думаю, что в зависимости от количества событий, если await context.CheckpointAsync();
вызывается много раз за короткое время, это не работает...
И конечно, я развернул, когда события минимальны..