public class EventProcessor : IEventProcessor
{
private readonly IEventService _eventService;
private readonly ILogger _logger;
private readonly Lazy<RetryPolicy> _retryPolicy;
private readonly IConfigurationProvider _configurationProvider;
public EventProcessor()
{
try
{
_eventService = ContainerProvider.Current.Container.Resolve<IEventService>();
_logger = ContainerProvider.Current.Container.Resolve<ILogger>();
_configurationProvider = ContainerProvider.Current.Container.Resolve<IConfigurationProvider>();
}
catch (Exception exception)
{
_logger.WriteError(string.Format("Error occured when intializing EventProcessor: '{0}'", exception));
}
}
public Task OpenAsync(PartitionContext context)
{
return Task.FromResult(0);
}
public async Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> events)
{
var eventsList = events.ToList();
EventData lastEvent = null;
foreach (var eventData in eventsList)
{
_logger.WriteVerbose(string.Format("Consumming {0} events...", eventsList.Count()));
_eventService.ProcessEvent(eventData);
lastEvent = eventData;
}
if (lastEvent != null)
{
await AzureServiceBusRetryPolicy.ExecuteAsync(async () => await context.CheckpointAsync(lastEvent));
}
}
public async Task CloseAsync(PartitionContext context, CloseReason reason)
{
_logger.WriteInfo("EventHub processor was closed for this reason: " + reason);
if (reason == CloseReason.Shutdown)
{
await AzureServiceBusRetryPolicy.ExecuteAsync(async () => await context.CheckpointAsync());
}
}
}
↧
How to pass a dependency to a class that implements IEventProcessor(Event Hub)
↧