Kafka基础教程(四):.net core集成使用Kafka消息队列
.net core使用Kafka可以像上一篇介绍的封装那样使用(Kafka基础教程(三):C#使用Kafka消息队列),但是我还是觉得再做一层封装比较好,同时还能使用它做一个日志收集的功能。
因为代码比较多,所有就直接放到码云(Gitee)上去了,地址:https://gitee.com/shanfeng1000/dotnetcore-demo/tree/master/Kafka(为什么不是github,因为github太慢了-_-!!)
感兴趣的可以克隆下来再按照自己的需求修改,这里简单介绍一下使用的Demo(Demo基于.net core3.1的版本,其他版本可能需要自行测试)
生产者(AspNetCore.WebApi.Producer)
首选需要在ConfigureServices中添加相关依赖项:
public void ConfigureServices(IServiceCollection services)
{
var hosts = new string[] { "192.168.209.133:9092", "192.168.209.134:9092", "192.168.209.135:9092" }; #region 日志记录 services.AddLogging(builder =>
{
builder.SetMinimumLevel(LogLevel.Trace);
});
services.AddKafkaLogger(options =>
{
options.BootstrapServers = hosts;
options.Category = "Home";
options.InitializeCount = 10;
options.Key = "log";
options.MinLevel = LogLevel.Trace;
options.Topic = "topic.logger";
options.ApplicationName = "AspNetCore.WebApi.Producer";
}); #endregion #region Kafka services.AddKafkaProducer(options =>
{
options.BootstrapServers = hosts;
options.InitializeCount = 3;
options.Key = "kafka";
options.Topic = "topic.kafka";
}); #endregion ......
}
AddKafkaLogger是添加日志的相关依赖服务配置,之后使用.net core的ILogger对象记录消息时就可以直接将消息发布到Kafka了。
AddKafkaProducer是添加Kafka发布者的相关配置,可以指定一个名称,使用时使用IKafkaProducerFactory接口注入即可,比如在Home控制器中使用:
[ApiController]
[Route("[controller]")]
public class HomeController : ControllerBase
{
IKafkaProducerFactory kafkaProducerFactory;
ILoggerFactory loggerFactory; public HomeController(IKafkaProducerFactory kafkaProducerFactory, ILoggerFactory loggerFactory)
{
this.kafkaProducerFactory = kafkaProducerFactory;
this.loggerFactory = loggerFactory;
} /// <summary>
/// 发布消息
/// </summary>
/// <param name="message">消息</param>
/// <returns>success</returns>
[HttpGet("Kafka")]
public string Kafka(string message)
{
message = message ?? "";
var producer = kafkaProducerFactory.Create();
producer.Publish(message); return "success";
}
/// <summary>
/// 日志
/// </summary>
/// <param name="message">消息</param>
/// <returns>success</returns>
[HttpGet("Logger")]
public string Logger(string message)
{
var logger1 = loggerFactory.CreateLogger("logger");
logger1.LogTrace($"logger1(LogTrace):{message}");
logger1.LogDebug($"logger1(LogDebug):{message}");
logger1.LogInformation($"logger1(LogInformation):{message}");
logger1.LogWarning($"logger1(LogWarning):{message}");
logger1.LogError($"logger1(LogError):{message}");
logger1.LogCritical($"logger1(LogCritical):{message}"); var logger2 = loggerFactory.CreateLogger("123456");
logger2.LogTrace($"logger2(LogTrace):{message}");
logger2.LogDebug($"logger2(LogDebug):{message}");
logger2.LogInformation($"logger2(LogInformation):{message}");
logger2.LogWarning($"logger2(LogWarning):{message}");
logger2.LogError($"logger2(LogError):{message}");
logger2.LogCritical($"logger2(LogCritical):{message}"); return "success";
}
}
消费者(AspNetCore.WebApi.Consumer)
首选需要在ConfigureServices中添加相关依赖项:
public void ConfigureServices(IServiceCollection services)
{
var hosts = new string[] { "192.168.209.133:9092", "192.168.209.134:9092", "192.168.209.135:9092" }; #region 日志记录 services.AddKafkaConsumer(options =>
{
options.BootstrapServers = hosts;
options.EnableAutoCommit = true;//自动提交
options.GroupId = "group.1";
options.Subscribers = KafkaSubscriber.From("topic.logger"); }).AddListener(result =>
{
Console.WriteLine("Message From topic.logger:" + result.Message);
}); #endregion #region Kafka services.AddKafkaConsumer(options =>
{
options.BootstrapServers = hosts;
options.EnableAutoCommit = false;
options.GroupId = "group.2";
options.Subscribers = KafkaSubscriber.From("topic.kafka"); }).AddListener(result =>//直接在lambda表达式中完成消费逻辑
{
Console.WriteLine("Message From topic.kafka:" + result.Message);
result.Commit();
}).AddListener<KafkaConsumerListener>();//实现IKafkaConsumerListener接口完成消费逻辑 #endregion ......
}
无论是日志的消息消费还是自定义的消息消费,都是先使用AddKafkaConsumer方法声明Kafka消费者的配置,然后使用AddListener方法添加消息消费的处理程序,AddListener有几个委托,可以接受一个lambda表达式,可以使用一个实现了IKafkaConsumerListener接口的类,就比如上面的KafkaConsumerListener类:
public class KafkaConsumerListener : IKafkaConsumerListener
{
public Task ConsumeAsync(RecieveResult recieveResult)
{
Console.WriteLine("KafkaConsumerListener:" + recieveResult.Message);
recieveResult.Commit();
return Task.CompletedTask;
}
}
Kafka基础教程(四):.net core集成使用Kafka消息队列的更多相关文章
- ActiveMQ基础教程(四):.net core集成使用ActiveMQ消息队列
接上一篇:ActiveMQ基础教程(三):C#连接使用ActiveMQ消息队列 这里继续说下.net core集成使用ActiveMQ.因为代码比较多,所以放到gitee上:https://gitee ...
- Kafka基础教程(一):认识Kafka
Kafka是Apache下的一个子项目,是一个高性能跨语言分布式发布/订阅消息队列系统,吞吐速率非常快,可以作为Hadoop的日志收集.Kafka是一个完全的分布式系统,这一点依赖于Zookeeper ...
- Qt零基础教程(四) QWidget详解篇
在博客园里面转载我自己写的关于Qt的基础教程,没次写一篇我会在这里更新一下目录: Qt零基础教程(四) QWidget详解(1):创建一个窗口 Qt零基础教程(四) QWidget详解(2):QWid ...
- Qt零基础教程(四)QWidget详解(3):QWidget的几何结构
Qt零基础教程(四) QWidget详解(3):QWidget的几何结构 这篇文章里面分析了QWidget中常用的几种几何结构 下图是Qt提供的分析QWidget几何结构的一幅图,在帮助的 Wind ...
- ASP.NET Core 基础教程 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 基础教程 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 是对 ASP.NET 有重大意义的一次重新设计.本章节我们将介绍 A ...
- Kafka基础教程(二):Kafka安装
因为kafka是基于Zookeeper的,而Zookeeper一般都是一个分布式的集群,尽管kafka有自带Zookeeper,但是一般不使用自带的,都是使用外部安装的,所以首先我们需要安装Zooke ...
- SpringCloud2.0 Ribbon 服务发现 基础教程(四)
1.启动[服务中心]集群,即 Eureka Server 参考 SpringCloud2.0 Eureka Server 服务中心 基础教程(二) 2.启动[服务提供者]集群,即 Eureka Cli ...
- Kafka基础教程(三):C#使用Kafka消息队列
接上篇Kafka的安装,我安装的Kafka集群地址:192.168.209.133:9092,192.168.209.134:9092,192.168.209.135:9092,所以这里直接使用这个集 ...
- GStreamer基础教程11 - 与QT集成
摘要 通常我们的播放引擎需要和GUI进行集成,在使用GStreamer时,GStreamre会负责媒体的播放及控制,GUI会负责处理用户的交互操作以及创建显示的窗口.本例中我们将结合QT介绍如何指定G ...
随机推荐
- spring注解-自动装配
Spring利用依赖注入(DI)完成对IOC容器中中各个组件的依赖关系赋值 一.@Autowired 默认优先按照类型去容器中找对应的组件(applicationContext.getBean(Boo ...
- swagger文档
关键配置文件 spring boot demo pom.xml <?xml version="1.0" encoding="UTF-8"?> < ...
- Taro 3.5 canary 发布:支持适配 鸿蒙
一.背景 鸿蒙作为华为自研开发的一款可以实现万物互联的操作系统,一经推出就受到了很大的关注,被国人寄予了厚望.而鸿蒙也没让人失望,今年 Harmony2.0 正式推出供用户进行升级之后,在短短的三个月 ...
- YC-Framework版本更新:V1.0.2
分布式微服务框架:YC-Framework版本更新V1.0.2!!! 版本更新,本次版本为V1.0.2 主要更新内容如下所示: 集成ActiveMQ; 集成微信生态(支持微信公众号.微信支付.微信开放 ...
- 【划重点】Python xlrd简介
一.用xlrd获取对应数据,并获取所有sheet的名字 import xlrd data=xlrd.open_workbook(r'C:\Users\ASUS\Desktop\重新开始\Python获 ...
- Lookup函数(Excel函数集团)
此处文章均为本妖原创,供下载.学习.探讨! 文章下载源是Office365国内版1Driver,如有链接问题请联系我. 请勿用于商业!谢谢 下载地址:https://officecommunity-m ...
- 解放生产力「GitHub 热点速览 v.21.51」
作者:HelloGitHub-小鱼干 解放生产力一直都是我们共同追求的目标,能在摸鱼的空闲把赚了.而大部分好用的工具便能很好地解放我们的生产力,比如本周特推 RedisJSON 不用对 JSON 做哈 ...
- 10 - Vue3 UI Framework - Tabs 组件
标签页是非常常用的组件,接下来我们来制作一个简单的 Tabs 组件 返回阅读列表点击 这里 需求分析 我们先做一个简单的需求分析 可以选择标签页排列的方向 选中的标签页应当有下划线高亮显示 切换选中时 ...
- Jenkins安装部署使用图文详解(非常详细)
前言 最近公司需要弄一套自动化运维部署,于是抽空学习了一下,用了两天左右完成Jenkins的安装部署和各种项目的配置化,于是整理一下进行分享. 介绍 Jenkins是一个独立的开源软件项目,是基于Ja ...
- git提交忽略文件.gitignore内容
###################################################################### # Build Tools .gradle /build/ ...