public DynamoDbRecordProcessor(
     RecordTranslatorRegistry translatorRegistry,
     IAmACommandProcessor commandProcessor,
     ILogger <DynamoDbRecordProcessor> logger)
 {
     _translatorRegistry = translatorRegistry;
     _commandProcessor   = commandProcessor;
     _logger             = logger;
 }
Beispiel #2
0
        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());
        }