public virtual async Task ProcessEventsAsync(PartitionContext context, IEnumerable <EventData> messages) { var eventDataList = new List <EventData>(); EventData lastEventData = null; if (ConsumerConfiguration.ConsumeDelayInSeconds == null) { lastEventData = messages.LastOrDefault(); eventDataList = messages.ToList(); } else { foreach (var eventData in messages) { if (ConsumerConfiguration.ConsumeDelayInSeconds != null && eventData.SystemProperties.EnqueuedTimeUtc <= DateTime.UtcNow.AddSeconds(ConsumerConfiguration.ConsumeDelayInSeconds.Value * (-1))) { lastEventData = eventData; eventDataList.Add(eventData); } else { break; } } } if (lastEventData != null) { try { bool sucess = await ProcessEventDataList(context, eventDataList); if (sucess) { await context.CheckpointAsync(lastEventData); } else if (!sucess && !string.IsNullOrWhiteSpace(ConsumerConfiguration.ProducerName)) { var sendToShuntList = new List <EventData>(); var sendToRetryList = new List <EventData>(); IEventHubProducerService eventHubProducerService = ServiceProvider.GetService <IEventHubProducerService>(); foreach (var eventData in eventDataList) { if (eventData.HasIsOkProperty()) { eventData.RemoveSendToShuntProperty().RemoveIsOkProperty().RemoveRetryProperty(); continue; } int incrementedRetryProperty = eventData.IncrementRetryProperty(); if (!string.IsNullOrWhiteSpace(ConsumerConfiguration.Shunt?.ProducerName) && (eventData.HasSendToShuntProperty() || (ConsumerConfiguration.Shunt.MaxRetry > 0 && incrementedRetryProperty > ConsumerConfiguration.Shunt.MaxRetry)) ) { eventData.RemoveSendToShuntProperty().RemoveIsOkProperty().RemoveRetryProperty(); sendToShuntList.Add(eventData); } else { sendToRetryList.Add(eventData); } } if (sendToShuntList.Any()) { await eventHubProducerService.SendEventDataAsync(ConsumerConfiguration.Shunt.ProducerName, sendToShuntList); } if (sendToRetryList.Any()) { await eventHubProducerService.SendEventDataAsync(ConsumerConfiguration.ProducerName, sendToRetryList); } await context.CheckpointAsync(lastEventData); } } catch (Exception ex) { IEventProcessorFactory eventProcessorFactory = null; try { await Task.Run(() => new ExecuteAsync(1, 1000, async() => { IEventHubConsumerService eventHubConsumerService = ServiceProvider.GetService <IEventHubConsumerService>(); eventProcessorFactory = await eventHubConsumerService.UnregisterEventMessageConsumerAsync(ConsumerConfiguration.Name); Thread.Sleep(10000); await eventHubConsumerService.RegisterEventMessageConsumerAsync(ConsumerConfiguration.Name, eventProcessorFactory); }).Do(true)); } catch (Exception ex2) { if (ServiceProvider != null) { IEventHubConsumerService eventHubConsumerService = ServiceProvider.GetService <IEventHubConsumerService>(); if (eventProcessorFactory != null) { await eventHubConsumerService.RegisterEventMessageConsumerAsync(ConsumerConfiguration.Name, eventProcessorFactory); } } } } } }
public ManagerApplicationService(IManagerService managerService, IEventHubProducerService eventHubProducerServices) { EventHubProducerServices = eventHubProducerServices; ManagerService = managerService; }
public QueuesApplicationService(ISampleService sampleService, IEventHubProducerService eventHubProducerService) { SampleService = sampleService; EventHubProducerService = eventHubProducerService; }