.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消息队列的更多相关文章

  1. ActiveMQ基础教程(四):.net core集成使用ActiveMQ消息队列

    接上一篇:ActiveMQ基础教程(三):C#连接使用ActiveMQ消息队列 这里继续说下.net core集成使用ActiveMQ.因为代码比较多,所以放到gitee上:https://gitee ...

  2. Kafka基础教程(一):认识Kafka

    Kafka是Apache下的一个子项目,是一个高性能跨语言分布式发布/订阅消息队列系统,吞吐速率非常快,可以作为Hadoop的日志收集.Kafka是一个完全的分布式系统,这一点依赖于Zookeeper ...

  3. Qt零基础教程(四) QWidget详解篇

    在博客园里面转载我自己写的关于Qt的基础教程,没次写一篇我会在这里更新一下目录: Qt零基础教程(四) QWidget详解(1):创建一个窗口 Qt零基础教程(四) QWidget详解(2):QWid ...

  4. Qt零基础教程(四)QWidget详解(3):QWidget的几何结构

    Qt零基础教程(四)  QWidget详解(3):QWidget的几何结构 这篇文章里面分析了QWidget中常用的几种几何结构 下图是Qt提供的分析QWidget几何结构的一幅图,在帮助的 Wind ...

  5. ASP.NET Core 基础教程 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 基础教程 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 是对 ASP.NET 有重大意义的一次重新设计.本章节我们将介绍 A ...

  6. Kafka基础教程(二):Kafka安装

    因为kafka是基于Zookeeper的,而Zookeeper一般都是一个分布式的集群,尽管kafka有自带Zookeeper,但是一般不使用自带的,都是使用外部安装的,所以首先我们需要安装Zooke ...

  7. SpringCloud2.0 Ribbon 服务发现 基础教程(四)

    1.启动[服务中心]集群,即 Eureka Server 参考 SpringCloud2.0 Eureka Server 服务中心 基础教程(二) 2.启动[服务提供者]集群,即 Eureka Cli ...

  8. Kafka基础教程(三):C#使用Kafka消息队列

    接上篇Kafka的安装,我安装的Kafka集群地址:192.168.209.133:9092,192.168.209.134:9092,192.168.209.135:9092,所以这里直接使用这个集 ...

  9. GStreamer基础教程11 - 与QT集成

    摘要 通常我们的播放引擎需要和GUI进行集成,在使用GStreamer时,GStreamre会负责媒体的播放及控制,GUI会负责处理用户的交互操作以及创建显示的窗口.本例中我们将结合QT介绍如何指定G ...

随机推荐

  1. Advanced C++ | Conversion Operators

    In C++, the programmer abstracts real world objects using classes as concrete types. Sometimes it is ...

  2. 虚机扩大容量与vm减少所占容量

    Linux的虚拟机碎片整理 sudo dd if=/dev/zero of=/free bs=1M sudo rm -f /free 镜像压缩 移动镜像 VBoxManage internalcomm ...

  3. Nginx 1.9.7.2 + PHP 5.6.18(FastCGI)在CentOS Linux下的编译安装

    本文参考张宴的Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)[原创]完成.所有操作命令都在CentOS 6.x 64位操作系统下实践 ...

  4. maven管理本地jar包

    maven作为包管理工具,好处不必多说.但是有些情况,比如需要引入第三方包,如快递鸟,支付宝,微信等jar包(当然有可能直接提供maven依赖),如果直接下载到本地之后,怎么整合到自己的maven工程 ...

  5. 【C/C++】vector 动态二维数组

    声明 vector<vector<int> vec; //赋值思路可以从这个很基础的操作里看出来 vector<int> a; a.push_back(1); a.pus ...

  6. 【Matlab】find函数用法

    find(A):返回向量中非零元素的位置 注意返回的是位置的脚标 //类似python,还是很好用的 如果是二维矩阵,是先横行后列的 b=find(a),a是一个矩阵,查询非零元素的位置 如果X是一个 ...

  7. Windows下mongodb的安装和配置

    1----->下载地址:https://www.mongodb.com/dr/fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl ...

  8. Spring MVC环境搭建和配置

    1. 创建Dynamic web project 2. 修改WEB-INF/web.xml,内容如下: <?xml version="1.0" encoding=" ...

  9. VMware 安装Linux (以CentOS7-2009为例)

    1.VMware下载安装 链接:https://pan.baidu.com/s/11Y-AFB3aaAFxafdGPw4zaw 提取码:hskj 2.CentOS镜像官网下载:https://www. ...

  10. WebRTC + WebSocket 实现视频通话

    前言 WebRTC WebRTC(Web Real-Time Communication).Real-Time Communication,实时通讯. WebRTC能让web应用和站点之间选择性地分享 ...