IHostedService

IHostedService
一、介绍:这个类官方介绍主要是用来实现实现后台任务,因为这个接口是托管主机服务,同时它提供了在服务启动和停止对应的接口。那么我们可以在可以使用它来做那些事情呢?
     作用:我们可以用它来做MQ队列的消费端,简单一点就是说在startAsync中开启一个线程,while(true){} 便利消费端中的数据。
二、代码实例:
1. 官方示例:
public interface IHostedService
{
    Task StartAsync(CancellationToken cancellationToken);
    Task StopAsync(CancellationToken cancellationToken);
}

2. 我实际的代码示例:

public class KafkaListener : IHostedService
    {
        public string _Topic { get; set; }
        public string _ConsumerGroup { get; set; }

        public void Register()
        {
            _Topic = Appsettings.app(new string[] { "ConfigEntity", "KafkaTop" }) + _Topic;
            Task.Run(() =>
            {
                var config = new ConsumerConfig
                {
                    GroupId = _ConsumerGroup,
                    BootstrapServers = ConfigHelper.GetConfig("ConfigEntity:BootstrapServers"),
                    AutoOffsetReset = AutoOffsetReset.Latest
                };
                var builder = new ConsumerBuilder<string, string>(config);
                using (var consumer = builder.Build())
                {
                    consumer.Subscribe(_Topic);
                    while (true)
                    {
                        var result = consumer.Consume();
                        try
                        {

                            KafkaInfo message = JsonConvert.DeserializeObject<KafkaInfo>(result.Message.Value);
                            Process(message.Message.ToString());
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine($"Topic : {result.Topic}, Message : {result.Message.Value},error:{ex.Message}");
                        }
                    }
                }
            });
        }
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            Register();
            await Task.CompletedTask;
        }

        public Task StopAsync(CancellationToken cancellationToken)
        {
            throw new NotImplementedException();
        }
        /// <summary>
        /// 处理消息的方法
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        public virtual bool Process(string message)
        {
            throw new NotImplementedException();
        }
    }

以上就是我使用监听Kafka使用的代码示例。

谢谢学习!!!

posted @ 2022-09-04 01:05  锦大大的博客呀!  阅读(288)  评论(0编辑  收藏  举报