Example #1
0
        private static IHost BuildHost()
        {
            return(new HostBuilder()
                   .ConfigureLogging(loggingBuilder => loggingBuilder.AddConsole())
                   .ConfigureHostConfiguration((configurationBuilder) =>
            {
                configurationBuilder.SetBasePath(Directory.GetCurrentDirectory());
                configurationBuilder.AddEnvironmentVariables(prefix: "ASR_");
            })
                   .ConfigureServices((hostContext, services) =>
            {
                var connections = new Connection[]
                {
                    new Connection <UpsertAccountEvent>(
                        new ConnectionName("credit.card.account.stream"),
                        new ChannelName("account.event"),
                        new RoutingKey("account.event"),
                        timeoutInMilliseconds: 200,
                        isDurable: true,
                        highAvailability: true)
                };

                var gatewayConfiguration = new KafkaMessagingGatewayConfiguration
                {
                    Name = "paramore.brighter.accounttransfer",
                    BootStrapServers = new[] { "localhost:9092" }
                };

                var messageConsumerFactory = new KafkaMessageConsumerFactory(gatewayConfiguration);

                services.AddServiceActivator(options =>
                {
                    options.Connections = connections;
                    options.ChannelFactory = new ChannelFactory(messageConsumerFactory);
                })
                .HandlersFromAssemblies(typeof(UpsertAccountEventHandler).Assembly)
                .MapperRegistryFromAssemblies(typeof(AccountEventMessageMapper).Assembly);

                services.AddSingleton <ILoggerFactory>(x => new SerilogLoggerFactory());
                services.AddHostedService <ServiceActivatorHostedService>();

                services.AddDbContext <CardDetailsContext>(options =>
                                                           options.UseMySql(hostContext.Configuration["Database:CardDetails"]));
            })
                   .UseSerilog()
                   .UseConsoleLifetime()
                   .Build());
        }
        public static void Main(string[] args)
        {
            LogManager.SetLogger(new ConsoleLogger());

            var configurationProvider = GetConfigurationProvider();
            var consumerFactory       = new KafkaMessageConsumerFactory(configurationProvider);

            var kafkaPublisher      = new KafkaMessagePublisher(configurationProvider.KafkaBroker);
            var dataPointsPublisher = new DataPointPublisher(kafkaPublisher, configurationProvider.DataPointTopicName);

            var database   = new MongoDbDatabase(configurationProvider.MongoDbHost, configurationProvider.MongoDbPort, configurationProvider.MongoDbDatabaseName);
            var repository = new DataPointRepository(database);

            RunLongRunning(new TimeSeriesAggregatorService(repository, dataPointsPublisher, consumerFactory, configurationProvider));

            kafkaPublisher.Dispose();
        }
Example #3
0
        private static void AddBackgroundConsumers(
            IServiceCollection services,
            IKafkaConsumerOptionsBuilder optionsBuilder)
        {
            var topicsNames = optionsBuilder.TopicConsumerTypes.Keys.ToList();

            for (var i = 0; i < optionsBuilder.PartitionCount; i++)
            {
                services.AddSingleton <IHostedService>(sp =>
                {
                    var kafkaConfiguration             = sp.GetRequiredService <IOptions <KafkaSettings> >().Value;
                    var consumerFactory                = new KafkaMessageConsumerFactory(sp, optionsBuilder.TopicConsumerTypes);
                    var deadLetterMessagesProducer     = sp.GetRequiredService <IDeadLetterMessagesProducer>();
                    var backGroundPerPartitionConsumer = new BackgroundPerPartitionConsumer(kafkaConfiguration, consumerFactory, deadLetterMessagesProducer, topicsNames);
                    return(backGroundPerPartitionConsumer);
                });
            }
        }
Example #4
0
        public static async Task Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                         .WriteTo.Console()
                         .CreateLogger();

            var host = new HostBuilder()
                       .ConfigureServices((hostContext, services) =>
            {
                var subscriptions = new KafkaSubscription[]
                {
                    new KafkaSubscription <GreetingEvent>(
                        new SubscriptionName("paramore.example.greeting"),
                        channelName: new ChannelName("greeting.event"),
                        routingKey: new RoutingKey("greeting.event"),
                        groupId: "kafka-GreetingsReceiverConsole-Sample",
                        timeoutInMilliseconds: 100,
                        offsetDefault: AutoOffsetReset.Earliest,
                        commitBatchSize: 5)
                };

                //create the gateway
                var consumerFactory = new KafkaMessageConsumerFactory(
                    new KafkaMessagingGatewayConfiguration {
                    Name = "paramore.brighter", BootStrapServers = new[] { "localhost:9092" }
                }
                    );

                services.AddServiceActivator(options =>
                {
                    options.Subscriptions  = subscriptions;
                    options.ChannelFactory = new ChannelFactory(consumerFactory);
                }).AutoFromAssemblies();


                services.AddHostedService <ServiceActivatorHostedService>();
            })
                       .UseConsoleLifetime()
                       .UseSerilog()
                       .Build();

            await host.RunAsync();
        }
Example #5
0
        public static async Task Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                         .WriteTo.Console()
                         .CreateLogger();

            var host = new HostBuilder()
                       .ConfigureServices((hostContext, services) =>
            {
                var connections = new Connection[]
                {
                    new Connection <GreetingEvent>(
                        new ConnectionName("paramore.example.greeting"),
                        new ChannelName("greeting.event"),
                        new RoutingKey("greeting.event"),
                        timeoutInMilliseconds: 200)
                };
                //create the gateway
                var messagingGatewayConfiguration = new KafkaMessagingGatewayConfiguration
                {
                    Name             = "paramore.brighter",
                    BootStrapServers = new[] { "localhost:9092" }
                };

                var consumerFactory = new KafkaMessageConsumerFactory(messagingGatewayConfiguration);

                services.AddServiceActivator(options =>
                {
                    options.Connections       = connections;
                    options.ChannelFactory    = new ChannelFactory(consumerFactory);
                    var outBox                = new InMemoryOutbox();
                    options.BrighterMessaging = new BrighterMessaging(outBox, outBox, new KafkaMessageProducerFactory(messagingGatewayConfiguration).Create(), null);
                }).AutoFromAssemblies();


                services.AddHostedService <ServiceActivatorHostedService>();
            })
                       .UseConsoleLifetime()
                       .UseSerilog()
                       .Build();

            await host.RunAsync();
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="KafkaInputChannelFactory"/> class.
 /// </summary>
 /// <param name="kafkaMessageConsumerFactory">The messageConsumerFactory.</param>
 public KafkaInputChannelFactory(KafkaMessageConsumerFactory kafkaMessageConsumerFactory)
 {
     _kafkaMessageConsumerFactory = kafkaMessageConsumerFactory;
 }
Example #7
0
        public static void Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                         .WriteTo.Console()
                         .CreateLogger();

            var container = new TinyIoCContainer();

            var handlerFactory       = new TinyIocHandlerFactory(container);
            var messageMapperFactory = new TinyIoCMessageMapperFactory(container);

            container.Register <IHandleRequests <GreetingEvent>, GreetingEventHandler>();

            var subscriberRegistry = new SubscriberRegistry();

            subscriberRegistry.Register <GreetingEvent, GreetingEventHandler>();

            //create policies
            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 policyRegistry = new PolicyRegistry
            {
                { CommandProcessor.RETRYPOLICY, retryPolicy },
                { CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy }
            };

            //create message mappers
            var messageMapperRegistry = new MessageMapperRegistry(messageMapperFactory)
            {
                { typeof(GreetingEvent), typeof(GreetingEventMessageMapper) }
            };

            //create the gateway
            var gatewayConfiguration = new KafkaMessagingGatewayConfiguration
            {
                Name             = "paramore.brighter",
                BootStrapServers = new[] { "localhost:9092" }
            };

            var messageConsumerFactory = new KafkaMessageConsumerFactory(gatewayConfiguration);

            var dispatcher = DispatchBuilder.With()
                             .CommandProcessor(CommandProcessorBuilder.With()
                                               .Handlers(new HandlerConfiguration(subscriberRegistry, handlerFactory))
                                               .Policies(policyRegistry)
                                               .NoTaskQueues()
                                               .RequestContextFactory(new InMemoryRequestContextFactory())
                                               .Build())
                             .MessageMappers(messageMapperRegistry)
                             .DefaultChannelFactory(new KafkaInputChannelFactory(messageConsumerFactory))
                             .Connections(new Connection[]
            {
                new Connection <GreetingEvent>(
                    new ConnectionName("paramore.example.greeting"),
                    new ChannelName("greeting.event"),
                    new RoutingKey("greeting.event"),
                    timeoutInMilliseconds: 200)
            }).Build();

            dispatcher.Receive();

            Console.WriteLine("Press Enter to stop ...");
            Console.ReadLine();

            dispatcher.End().Wait();
        }