public override bool OnStart() { try { // Register the dependency resolver for initializing handlers and service // classes. var resolver = CarWorkerHostDependencyResolver.CreateAsync().Result; DependencyResolverFactory.Register( resolver ); // Set up the process defaults for connections to optimize storage performance ServicePointManager.DefaultConnectionLimit = int.MaxValue; var configuration = DispatcherConfiguration.GetCurrentConfiguration(); var typesToSearchForHandlers = typeof(UpdateLocationHandler) .Assembly .DefinedTypes; _coordinator = ProcessingCoordinator.CreateAsync( RoleEnvironment.CurrentRoleInstance.Id, configuration.EventHubName, configuration.ConsumerGroupName, configuration.EventHubConnectionString, configuration.CheckpointStorageAccount, configuration.MaxBatchSize, configuration.PrefetchCount, configuration.ReceiveTimeout, configuration.MaxConcurrencyPerProcessor, typesToSearchForHandlers, (name, partitionId) => new CircuitBreaker( name, partitionId, configuration.CircuitBreakerWarningLevel, configuration.CircuitBreakerTripLevel, configuration.CircuitBreakerStallInterval, configuration.CircuitBreakerLogCooldownInterval), new DispatcherInstrumentationManager(instrumentationEnabled: true).CreatePublisher("WaWorkerHost")).Result; bool result = base.OnStart(); return(result); } catch (Exception ex) { // Hard error on startup, usually configuration or security related // Ensure that we log this error, including a direct post to the local // event log LogHelpers.HandleRoleException(Logger, "OnStart()", ex); throw; } }
private static async Task RunAsync(CancellationToken token) { var configuration = DispatcherConfiguration.GetCurrentConfiguration(); // Configure dependency resolver (including poison handler) var resolver = await ConsoleHostDependencyResolver.CreateAsync(); DependencyResolverFactory.Register( resolver ); Console.WriteLine("Initializing coordinator"); var messageProcessor = await ProcessingCoordinator.CreateAsync( "Console", configuration.EventHubName, configuration.ConsumerGroupName, configuration.EventHubConnectionString, configuration.CheckpointStorageAccount, configuration.MaxBatchSize, configuration.PrefetchCount, configuration.ReceiveTimeout, configuration.MaxConcurrencyPerProcessor, typeof(UpdateLocationHandler).Assembly.DefinedTypes, (name, partitionId) => new CircuitBreaker( name, partitionId, configuration.CircuitBreakerWarningLevel, configuration.CircuitBreakerTripLevel, configuration.CircuitBreakerStallInterval, configuration.CircuitBreakerLogCooldownInterval), new DispatcherInstrumentationManager(true, true).CreatePublisher("console")); Console.WriteLine("Running processor"); try { await Task.Delay(Timeout.InfiniteTimeSpan, token); } catch (TaskCanceledException) { /* expected cancellation */ } messageProcessor.Dispose(); }