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