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(); }
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); }); } }
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(); }
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; }
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(); }