public KafkaConsumer(
     KafkaConsumerConfiguration configuration,
     IKafkaDeserializerFactory deserializerFactory,
     IKafkaLogger <KafkaConsumer <TKey, TValue> > logger)
     : this(new ConsumerBuilderWrapper <TKey, TValue>(configuration, logger), configuration, deserializerFactory, logger)
 {
 }
Esempio n. 2
0
        // 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>();
        }
Esempio n. 3
0
        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);
        }
Esempio n. 6
0
        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>();
        }
Esempio n. 7
0
 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);
        }
Esempio n. 9
0
 public OrderWalletPayErrorBackgroundService(OrderWalletPayErrorHandler handler,
                                             KafkaConsumerConfiguration configuration) : base(handler, configuration)
 {
 }
 public KafkaConsumerFactory(KafkaConsumerConfiguration configuration)
 {
     _configuration = configuration;
 }
Esempio n. 11
0
 public OrderStockUpdatedBackgroundService(OrderStockUpdatedHandler handler,
                                           KafkaConsumerConfiguration configuration) : base(handler, configuration)
 {
 }