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使用的代码示例。
谢谢学习!!!