Esempio n. 1
0
        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);
                            }
                        }
                    }
                }
            }
        }
Esempio n. 2
0
 public ManagerApplicationService(IManagerService managerService, IEventHubProducerService eventHubProducerServices)
 {
     EventHubProducerServices = eventHubProducerServices;
     ManagerService           = managerService;
 }
 public QueuesApplicationService(ISampleService sampleService, IEventHubProducerService eventHubProducerService)
 {
     SampleService           = sampleService;
     EventHubProducerService = eventHubProducerService;
 }