Exemplo n.º 1
0
        /// <summary>
        /// Constructor. Initializes the <see cref="_consumer"/> instance.
        /// </summary>
        /// <param name="consumerFactory">
        /// A <see cref="IKafkaConsumerFactory{TKey,TValue}"/> using <see cref="SubmitKey"/> keys and <see cref="string"/> values</param>
        /// <param name="diffGenerator">A <see cref="IDiffGenerator"/>. Used to generate diffs from left and right values.</param>
        /// <param name="diffRepository">A <see cref="IDiffRepository"/>. Used to persist <see cref="DiffRecord"/>s.</param>
        /// <param name="keyDeserializer">A <see cref="IDeserializer{T}"/>, used to deserialize <see cref="SubmitKey"/>s.</param>
        /// <param name="valueDeserializer">A <see cref="IDeserializer{T}"/>, used to deserialize <see cref="string"/> values.</param>
        /// <param name="logger">A <see cref="ILogger{T}"/> for this class.</param>
        /// <param name="bootstrapServer">Kafka server. Overrides default 'localhost:9092' value.</param>
        public TopicListener(
            IKafkaConsumerFactory <SubmitKey, string> consumerFactory,
            IDiffGenerator diffGenerator,
            IDiffRepository diffRepository,
            IDeserializer <SubmitKey> keyDeserializer,
            IDeserializer <string> valueDeserializer,
            ILogger <TopicListener> logger,
            string bootstrapServer)
        {
            _diffGenerator  = diffGenerator;
            _diffRepository = diffRepository;
            _logger         = logger;

            // TODO: not sure it must be a ConcurrentDictionary here, but keeping it just in case
            var config = new ConcurrentDictionary <string, object>(Config);

            if (!string.IsNullOrWhiteSpace(bootstrapServer))
            {
                config["bootstrap.servers"] = bootstrapServer;
            }

            _logger.Info($"config[bootstrap.servers] = {config["bootstrap.servers"]}.");
            _consumer = consumerFactory.Create(config, keyDeserializer, valueDeserializer);
            _consumer.Assign(new List <TopicPartitionOffset> {
                new TopicPartitionOffset(Topic, 0, 0)
            });
        }
Exemplo n.º 2
0
 public EventBusKafka(IEventBusSubscriptionsManager subscriptionsManager, IKafkaConsumerFactory consumerFactory, ILifetimeScope autofac, IKafkaConsumerConfiguration configuration, IDeserializer <string> valueDeserializer)
 {
     this.subscriptionsManager = subscriptionsManager ?? new InMemoryEventBusSubscriptionsManager();
     this.consumerFactory      = consumerFactory;
     this.autofac           = autofac;
     this.configuration     = configuration;
     this.valueDeserializer = valueDeserializer;
     this.subscribedTopics  = configuration.SubscribedTopics;
     Configuration          = configuration.Configuration;
     valueDeserializer.Configure(new List <KeyValuePair <string, object> > {
         new KeyValuePair <string, object>("dotnet.string.serializer.encoding.key", configuration.Encoding.HeaderName)
     }, true);
     CreateOneConsumerPerTopic();
 }