.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. Android,iOS系统有什么区别

    两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制.Android是一种基于Linux的自由及开源的操作系统,iOS是由苹果公司开发的移动操作系统IOS中用于UI指令权限最高,安 ...

  2. Linux:sqlldr命令

    第一步:写一个 ctl格式的控制文件 CTL 控制文件的内容 : load data --1. 控制文件标识 infile 'xxx.txt' --2. 要导入的数据文件名 insert into t ...

  3. 【Linux】【Services】【Project】Cobbler自动化装机

    1. 概念 1.1. Cobbler 1.2. PXE 1.3. 2. 版本信息 2.1. OS:Red Hat Enterprise Linux Server release 7.3 (Maipo) ...

  4. RocketMQ应用及原理剖析

    主流消息队列选型对比分析 基础项对比 可用性.可靠性对比 功能性对比 对比分析 Kafka:系统间的流数据通道 RocketMQ:高性能的可靠消息传输 RabbitMQ:可靠消息传输 RocketMQ ...

  5. 【Office】【Excel】将多个工作表合为一个工作表

    在工作表中按下alt+F11打开vba编辑窗口,在菜单栏中选择[插入]=>[模板],将下面的代码粘贴过去,然后运行即可 点击查看代码 Sub 合并当前工作簿下的所有工作表() On Error ...

  6. IDE常用插件

    IDE 常用插件集合 :

  7. Java oop 笔记

    摘要网址:http://note.youdao.com/noteshare?id=bbdc0b970721e40d327db983a2f96371

  8. php常用的数组排序函数

    sort() 函数用于对数组单元从低到高进行排序.rsort() 函数用于对数组单元从高到低进行排序.asort() 函数用于对数组单元从低到高进行排序并保持索引关系.arsort() 函数用于对数组 ...

  9. GoLang设计模式17 - 访客模式

    说明 访客模式是一种行为型设计模式.通过访客模式可以为struct添加方法而不需要对其做任何调整. 来看一个例子,假如我们需要维护一个对如下形状执行操作的库: 方形(Square) 圆形(Circle ...

  10. CF938B Run For Your Prize 题解

    Content 有两个人,一个在 \(1\) 处,一个在 \(10^6\) 处,在他们之间有 \(n\) 个奖品,第 \(i\) 个奖品在 \(a_i\) 处.一开始在 \(1\) 处的人每秒可向右移 ...