public DynamoDbRecordProcessor( RecordTranslatorRegistry translatorRegistry, IAmACommandProcessor commandProcessor, ILogger <DynamoDbRecordProcessor> logger) { _translatorRegistry = translatorRegistry; _commandProcessor = commandProcessor; _logger = logger; }
private static IHost BuildHost() { return(new HostBuilder() .ConfigureLogging(loggingBuilder => loggingBuilder.AddConsole()) .ConfigureHostConfiguration((configurationBuilder) => { configurationBuilder.SetBasePath(Directory.GetCurrentDirectory()); configurationBuilder.AddEnvironmentVariables(prefix: "ASP_"); }) .ConfigureServices((hostContext, services) => { var gatewayConnection = new KafkaMessagingGatewayConfiguration { Name = "paramore.brighter.accounttransfer", BootStrapServers = new[] { "localhost:9092" } }; var retryPolicy = Policy.Handle <Exception>().WaitAndRetry(new[] { TimeSpan.FromMilliseconds(50), TimeSpan.FromMilliseconds(100), TimeSpan.FromMilliseconds(150) }); var circuitBreakerPolicy = Policy.Handle <Exception>().CircuitBreaker(1, TimeSpan.FromMilliseconds(500)); var retryPolicyAsync = Policy.Handle <Exception>().WaitAndRetryAsync(new[] { TimeSpan.FromMilliseconds(50), TimeSpan.FromMilliseconds(100), TimeSpan.FromMilliseconds(150) }); var circuitBreakerPolicyAsync = Policy.Handle <Exception>().CircuitBreakerAsync(1, TimeSpan.FromMilliseconds(500)); var policyRegistry = new PolicyRegistry() { { CommandProcessor.RETRYPOLICY, retryPolicy }, { CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy }, { CommandProcessor.RETRYPOLICYASYNC, retryPolicyAsync }, { CommandProcessor.CIRCUITBREAKERASYNC, circuitBreakerPolicyAsync } }; services.AddSingleton <IReadOnlyPolicyRegistry <string> >(policyRegistry); var producer = new KafkaMessageProducerFactory(gatewayConnection).Create(); services .AddBrighter(options => { options.PolicyRegistry = policyRegistry; options.BrighterMessaging = new BrighterMessaging(new InMemoryOutbox(), producer); }) .MapperRegistryFromAssemblies(typeof(AccountEventMessageMapper).Assembly); var useLocalAwsServices = hostContext.Configuration.GetValue <bool>("AWS:UseLocalServices"); if (useLocalAwsServices) { services.AddSingleton <IAmazonDynamoDB>(sp => CreateClient(hostContext.Configuration)); services.AddSingleton <IAmazonDynamoDBStreams>(sp => CreateStreamClient(hostContext.Configuration)); } else { services.AddAWSService <IAmazonDynamoDB>(); services.AddAWSService <IAmazonDynamoDBStreams>(); } var translatorRegistry = new RecordTranslatorRegistry(new TranslatorFactory()); translatorRegistry.Add(typeof(AccountEvent), typeof(AccountFromRecordTranslator)); services.AddSingleton <RecordTranslatorRegistry>(translatorRegistry); services.AddSingleton <IRecordProcessor <StreamRecord>, DynamoDbRecordProcessor>(); services.AddSingleton <IStreamReader, DynamoStreamReader>(); services.AddHostedService <Pump>(); }) .UseSerilog() .UseConsoleLifetime() .Build()); }