2025-04-14 19:10:27 +08:00

80 lines
2.3 KiB
C#

// See https://aka.ms/new-console-template for more information
using Confluent.Kafka;
using JiShe.CollectBus.Kafka.AdminClient;
using JiShe.CollectBus.Kafka.Consumer;
using JiShe.CollectBus.Kafka.Producer;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Serilog;
using System.Text.Json;
using static Confluent.Kafka.ConfigPropertyNames;
// 构建配置
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
// 直接读取配置项
var greeting = config["ServerTagName"];
Console.WriteLine(greeting); // 输出: Hello, World!
// 创建服务容器
var services = new ServiceCollection();
// 注册 IConfiguration 实例
services.AddSingleton<IConfiguration>(config);
// 初始化日志
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(config) // 从 appsettings.json 读取配置
.CreateLogger();
// 配置日志系统
services.AddLogging(logging =>
{
logging.ClearProviders();
logging.AddSerilog();
});
services.AddSingleton<IAdminClientService, AdminClientService>();
services.AddTransient(typeof(IProducerService<,>), typeof(ProducerService<,>));
//services.AddSingleton(typeof(IConsumerService<,>), typeof(ConsumerService<,>));
// 构建ServiceProvider
var serviceProvider = services.BuildServiceProvider();
// 获取日志记录器工厂
var loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
var logger = loggerFactory.CreateLogger<Program>();
logger.LogInformation("程序启动");
var adminClientService = serviceProvider.GetRequiredService<IAdminClientService>();
string topic = "test-topic";
//await adminClientService.DeleteTopicAsync(topic);
// 创建 topic
await adminClientService.CreateTopicAsync(topic, 3, 3);
var producerService = serviceProvider.GetRequiredService<IProducerService<Null, string>>();
int i = 1;
while (i <= 10)
{
await producerService.ProduceAsync(topic, JsonSerializer.Serialize(new { topic = topic, val = i }));
i++;
}
while (true)
{
var key = Console.ReadKey(intercept: true); // intercept:true 隐藏按键显示
if (key.Key == ConsoleKey.Escape)
{
Console.WriteLine("\n程序已退出");
break;
}
}
(serviceProvider as IDisposable)?.Dispose();