ASP.Net Core中使用的最多的是Confluent.Kafka这个包,以下用实例展示应用
1.下载Nuget包
首先是下载Confluent.Kafka这个包
2.创建Producer消息生产者
发送者
public class KafkaProducer
{
public static async Task SendAsync(string topic, T value) where T: KafkaMessage
{
var config = new ProducerConfig { BootstrapServers = ConfigEntity.Instance.kafkaMapping.BootstrapServers };//服务器IP
ProducerBuilder producerBuilder = new ProducerBuilder(config);
using (var p = producerBuilder.Build())
{
try
{
var dr = await p.ProduceAsync(topic, new Message { Value = JsonConvert.SerializeObject(value) });
Console.WriteLine($"Delivered '{dr.Value}' to '{dr.TopicPartitionOffset}'");
}
catch (ProduceException e)
{
Console.WriteLine($"Delivery failed: {e.Error.Reason}");
}
}
}
}
复制代码
其中要注意的一点ProducerBuilder中的TValue类型只能是Confluent.Kafka.Null, int, long, string, float, double, byte[]. 这7种类型, 否则在调用producerBuilder.Build()时会抛出 ArgumentNullException(Key serializer not specified and there is no default serializer defined for type {typeof(TKey).Name})
消息体中包含你的消息必须的内容
public class KafkaMessage
{
}
复制代码
3.创建Consumer消息消费者
总消费类
public class KafkaConsumer where T : KafkaMessage
{
public string Topic { get; set; }
public string ConsumerGroup { get; set; }
public void Subscribe(Action dealMessage)
{
var config = new ConsumerConfig
{
GroupId = ConsumerGroup,
BootstrapServers = ConfigEntity.Instance.kafkaMapping.BootstrapServers,
AutoOffsetReset = AutoOffsetReset.Latest
};
Task.Run(() =>
{
var builder = new ConsumerBuilder(config);
using (var consumer = builder.Build())
{
consumer.Subscribe(Topic);
while (true)
{
var result = consumer.Consume();
try
{
var message = JsonConvert.DeserializeObject(result.Value);
dealMessage(message);
}
catch (Exception)
{
Console.WriteLine($"Topic : {result.Topic}, Message : {result.Value}");
}
}
}
});
}
}
复制代码
子消费类
interface ITestKafkaConsumer
{
void DealMessage(TestKafkaEntity message);
void Subscribe();
}
public class TestKafkaConsumer : ITestKafkaConsumer
{
private KafkaConsumer consumer { get; set; }
public TestKafkaConsumer()
{
consumer = new KafkaConsumer
{
Topic = "test",
ConsumerGroup = "console-consumer-63873",
};
}
public void DealMessage(TestKafkaEntity message)
{
Console.WriteLine("-------------------------------------------------------------");
Console.WriteLine("这是一个消费者!!!" + message.ConsumerValue);
Console.WriteLine("-------------------------------------------------------------");
}
public void Subscribe()
{
consumer.Subscribe(DealMessage);
}
}
复制代码
通过回调方法的方式, 将子消息类中的方法传入总消息类中
4.注入消费者
在Startup.cs类中的ConfigureServices方法中注入子消费类:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton();
}
复制代码
然后在Program.cs类中的Main方法启动消费者:
public static void Main(string[] args)
{
var hostBuilder = CreateHostBuilder(args);
var host = hostBuilder.Build();
using (var scope = host.Services.CreateScope())
{
var testConsumer = scope.ServiceProvider.GetService();
testConsumer.Subscribe();
}
host.Run(); ;
}
复制代码
结果展示:
以上就是kafka在ASP.Net Core中的简单实现
关于找一找教程网
本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[Kafka在ASP.Net Core上的应用]http://www.zyiz.net/tech/detail-110604.html