예제 #1
0
        public void Connect()
        {
            if (_consumerClient != null)
            {
                return;
            }

            ConnectionLock.Wait();

            try
            {
                if (_consumerClient == null)
                {
                    _kafkaOptions.MainConfig["group.id"]          = _groupId;
                    _kafkaOptions.MainConfig["auto.offset.reset"] = "earliest";//初始化连接时读取最早的信息
                    var config = _kafkaOptions.AsKafkaConfig();

                    _consumerClient = new ConsumerBuilder <string, byte[]>(config)
                                      .SetErrorHandler(ConsumerClient_OnConsumeError)
                                      .Build();
                }
            }
            finally
            {
                ConnectionLock.Release();
            }
        }
예제 #2
0
        public IProducer <string, byte[]> RentProducer()
        {
            if (_producerPool.TryDequeue(out var producer))
            {
                Interlocked.Decrement(ref _pCount);

                return(producer);
            }

            producer = new ProducerBuilder <string, byte[]>(_options.AsKafkaConfig()).Build();

            return(producer);
        }
예제 #3
0
        public ConnectionPool(ILogger <ConnectionPool> logger, IOptions <KafkaOptions> options)
        {
            _options      = options.Value;
            _producerPool = new ConcurrentQueue <IProducer <string, byte[]> >();
            _maxSize      = _options.ConnectionPoolSize;

            logger.LogDebug("Caf Kafka configuration: {0}", JsonConvert.SerializeObject(_options.AsKafkaConfig(), Formatting.Indented));
        }