示例#1
0
        /// <summary>
        /// 监听
        /// </summary>
        /// <param name="subscribers"></param>
        /// <param name="action"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public void Listen(KafkaSubscriber[] subscribers, Action <RecieveResult> action = null, CancellationToken cancellationToken = default)
        {
            ListenResult result = new ListenResult();

            cancellationToken.Register(() =>
            {
                result.Stop();
            });
            using (var consumer = CreateConsumer(result, subscribers))
            {
                while (!result.Stoped)
                {
                    InternalListen(consumer, result.Token, action);
                }
            }
        }
示例#2
0
        /// <summary>
        /// 异步监听
        /// </summary>
        /// <param name="subscribers"></param>
        /// <param name="action"></param>
        /// <returns></returns>
        public async Task <ListenResult> ListenAsync(KafkaSubscriber[] subscribers, Action <RecieveResult> action = null)
        {
            ListenResult result = new ListenResult();

            new Task(() =>
            {
                using (var consumer = CreateConsumer(result, subscribers))
                {
                    while (!result.Stoped)
                    {
                        InternalListen(consumer, result.Token, action);
                    }
                }
            }).Start();
            return(await Task.FromResult(result));
        }
示例#3
0
        /// <summary>
        /// 创建一个消费者
        /// </summary>
        /// <param name="listenResult"></param>
        /// <param name="subscribers"></param>
        /// <returns></returns>
        private IConsumer <string, object> CreateConsumer(ListenResult listenResult, params KafkaSubscriber[] subscribers)
        {
            if (disposed)
            {
                throw new ObjectDisposedException(nameof(KafkaConsumer));
            }

            CheckSubscribers(subscribers);

            CreateConsumerBuilder();

            var consumer = builder.Build();

            listenResult.Token.Register(() =>
            {
                consumer.Dispose();
            });

            SetSubscribers(consumer, subscribers);

            consumers.Add(consumer);

            return(consumer);
        }