public KafkaConsumer( KafkaConsumerConfiguration configuration, IKafkaDeserializerFactory deserializerFactory, IKafkaLogger <KafkaConsumer <TKey, TValue> > logger) : this(new ConsumerBuilderWrapper <TKey, TValue>(configuration, logger), configuration, deserializerFactory, logger) { }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.Configure <MongoConfigurationOptions>(Configuration.GetSection("MongoDb")); services.Configure <KafkaSettings>(Configuration.GetSection("Kafka")); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); services.AddAuthentication("Bearer").AddIdentityServerAuthentication(options => { options.Authority = Configuration.GetSection("IdentityUrlExternal").Value; options.RequireHttpsMetadata = false; options.ApiName = "appointment"; }); services.AddSingleton <ISubscriptionEventBus, EventBusKafka>(sp => { var iLifetimeScope = sp.GetRequiredService <ILifetimeScope>(); var consumerFactory = sp.GetRequiredService <IKafkaConsumerFactory>(); var kafkaSettings = sp.GetRequiredService <IOptions <KafkaSettings> >().Value; var kafkaConfig = new KafkaConsumerConfiguration(kafkaSettings.BrokerAddresses, kafkaSettings.GroupId, kafkaSettings.ClientId, kafkaSettings.SubscribedTopics); var valueDeserializer = new StringDeserializer(); var topics = kafkaSettings.SubscribedTopics; var eventBusSubscriptionsManager = sp.GetRequiredService <IEventBusSubscriptionsManager>(); return(new EventBusKafka(eventBusSubscriptionsManager, consumerFactory, iLifetimeScope, kafkaConfig, valueDeserializer)); }); services.AddSwaggerDocumentation(Configuration); services.AddTransient <IntegrationTestEventHandler>(); }
private static async Task Main() { var guid = Guid.NewGuid(); var topic = new Topic("Test"); var kafkaConsumerConfiguration = new KafkaConsumerConfiguration("localhost:9092", new List <Topic> { topic }, $"Test", AutoOffsetReset.Earliest, 5000); using var publisher = new KafkaEventPublisher(ConsoleLogger <KafkaEventPublisher> .Create(), kafkaConsumerConfiguration); using var listener = new KafkaEventListener(ConsoleLogger <KafkaEventListener> .Create(), kafkaConsumerConfiguration);
internal KafkaConsumer( IConsumerBuilderWrapper <TKey, TValue> consumerBuilder, KafkaConsumerConfiguration configuration, IKafkaDeserializerFactory deserializerFactory, IKafkaLogger <KafkaConsumer <TKey, TValue> > logger) { _configuration = configuration; _logger = logger; consumerBuilder.SetValueDeserializer(deserializerFactory.GetValueDeserializer <TValue>()); _consumer = consumerBuilder.Build(); }
public ConsumerBuilderWrapper( KafkaConsumerConfiguration configuration, IKafkaLogger <KafkaConsumer <TKey, TValue> > logger) { var consumerLogger = new ConsumerLogger <TKey, TValue>(logger); var consumerConfig = new ConsumerConfig { BootstrapServers = configuration.BootstrapServers, GroupId = configuration.GroupId, EnableAutoCommit = true, EnablePartitionEof = true, }; if (configuration.StartAtEarliestOffset) { consumerConfig.AutoOffsetReset = AutoOffsetReset.Earliest; } _builder = new ConsumerBuilder <TKey, TValue>(consumerConfig).SetLogHandler(consumerLogger.Log); }
private void RegisterEventBus(IServiceCollection services) { services.Configure <KafkaSettings>(Configuration.GetSection("Kafka")); services.AddSingleton <ISubscriptionEventBus, EventBusKafka>(sp => { var iLifetimeScope = sp.GetRequiredService <ILifetimeScope>(); var consumerFactory = sp.GetRequiredService <IKafkaConsumerFactory>(); var kafkaSettings = sp.GetRequiredService <IOptions <KafkaSettings> >().Value; var kafkaConfig = new KafkaConsumerConfiguration(kafkaSettings.BrokerAddresses, kafkaSettings.GroupId, kafkaSettings.ClientId, kafkaSettings.SubscribedTopics); var valueDeserializer = new StringDeserializer(); var topics = kafkaSettings.SubscribedTopics; var eventBusSubscriptionsManager = sp.GetRequiredService <IEventBusSubscriptionsManager>(); return(new EventBusKafka(eventBusSubscriptionsManager, consumerFactory, iLifetimeScope, kafkaConfig, valueDeserializer)); }); services.AddSingleton <IEventBusSubscriptionsManager, InMemoryEventBusSubscriptionsManager>(); }
private void InitializeKafka(KafkaConsumerConfiguration kafkaConfiguration) { _consumerConfig = new ConsumerConfig { BootstrapServers = ThrowIfEmpty(kafkaConfiguration.BootstrapServerUrls, $"{nameof(KafkaConsumerConfiguration)} bootstrap server urls cannot be null or empty."), GroupId = ThrowIfEmpty(kafkaConfiguration.GroupId, $"{nameof(KafkaConsumerConfiguration)} group id cannot be null or empty."), AutoOffsetReset = AutoOffsetReset.Earliest }; _schemaRegistry = new CachedSchemaRegistryClient(new SchemaRegistryConfig { Url = ThrowIfEmpty(kafkaConfiguration.AvroSchemaRegistryUrls, $"{nameof(KafkaConsumerConfiguration)} schema registry urls cannot be null or empty.") }); _consumerBuilder = new ConsumerBuilder <string, Event>(_consumerConfig) .SetErrorHandler(HandleErrors()) .SetKeyDeserializer(new AvroDeserializer <string>(_schemaRegistry).AsSyncOverAsync()) .SetValueDeserializer(new AvroDeserializer <Event>(_schemaRegistry).AsSyncOverAsync()) .Build(); }
public void Arrange() { _innerConsumerMock = new Mock <IConsumer <string, string> >(); _innerConsumerMock.Setup(c => c.Consume(It.IsAny <CancellationToken>())) .Returns(new ConsumeResult <string, string> { IsPartitionEOF = true }); _consumerBuilderMock = new Mock <IConsumerBuilderWrapper <string, string> >(); _consumerBuilderMock.Setup(b => b.Build()) .Returns(_innerConsumerMock.Object); _configuration = new KafkaConsumerConfiguration(); _deserializerMock = new Mock <IDeserializer <string> >(); _deserializerFactoryMock = new Mock <IKafkaDeserializerFactory>(); _deserializerFactoryMock.Setup(f => f.GetValueDeserializer <string>()) .Returns(_deserializerMock.Object); _loggerMock = new Mock <IKafkaLogger <KafkaConsumer <string, string> > >(); _consumer = new KafkaConsumer <string, string>( _consumerBuilderMock.Object, _configuration, _deserializerFactoryMock.Object, _loggerMock.Object); _messageHandlerMock = new Mock <Func <ConsumedMessage <string, string>, CancellationToken, Task> >(); _messageHandlerMock.Setup(h => h.Invoke(It.IsAny <ConsumedMessage <string, string> >(), It.IsAny <CancellationToken>())) .Returns(Task.CompletedTask); _endOfPartitionHandlerMock = new Mock <Func <CancellationToken, Task> >(); _endOfPartitionHandlerMock.Setup(h => h.Invoke(It.IsAny <CancellationToken>())) .Returns(Task.CompletedTask); }
public OrderWalletPayErrorBackgroundService(OrderWalletPayErrorHandler handler, KafkaConsumerConfiguration configuration) : base(handler, configuration) { }
public KafkaConsumerFactory(KafkaConsumerConfiguration configuration) { _configuration = configuration; }
public OrderStockUpdatedBackgroundService(OrderStockUpdatedHandler handler, KafkaConsumerConfiguration configuration) : base(handler, configuration) { }