From 4e30cc13f17e8591ec9f3c07f20ecdcc7a96d390 Mon Sep 17 00:00:00 2001 From: zenghongyao <873884283@qq.com> Date: Wed, 30 Apr 2025 09:50:50 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dkafka=E5=9F=BA=E5=87=86?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../JiShe.CollectBus.Kafka.Test.csproj | 14 +-- .../KafkaProduceBenchmark.cs | 29 ++++-- .../Lib/JiShe.CollectBus.Common.dll | Bin 0 -> 171008 bytes .../JiShe.CollectBus.Kafka.Test/Program.cs | 34 +++++-- .../appsettings.json | 84 +++++++----------- .../Internal/KafkaPollyPipeline.cs | 12 +-- .../AnalysisData/DataStorage.cs | 4 +- 7 files changed, 89 insertions(+), 88 deletions(-) create mode 100644 modules/JiShe.CollectBus.Kafka.Test/Lib/JiShe.CollectBus.Common.dll diff --git a/modules/JiShe.CollectBus.Kafka.Test/JiShe.CollectBus.Kafka.Test.csproj b/modules/JiShe.CollectBus.Kafka.Test/JiShe.CollectBus.Kafka.Test.csproj index db97b00..c312740 100644 --- a/modules/JiShe.CollectBus.Kafka.Test/JiShe.CollectBus.Kafka.Test.csproj +++ b/modules/JiShe.CollectBus.Kafka.Test/JiShe.CollectBus.Kafka.Test.csproj @@ -31,10 +31,14 @@ - + + diff --git a/modules/JiShe.CollectBus.Kafka.Test/KafkaProduceBenchmark.cs b/modules/JiShe.CollectBus.Kafka.Test/KafkaProduceBenchmark.cs index a8b8d93..4152a33 100644 --- a/modules/JiShe.CollectBus.Kafka.Test/KafkaProduceBenchmark.cs +++ b/modules/JiShe.CollectBus.Kafka.Test/KafkaProduceBenchmark.cs @@ -1,8 +1,10 @@ using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Jobs; using Confluent.Kafka; +using JiShe.CollectBus.Common; using JiShe.CollectBus.Kafka.AdminClient; using JiShe.CollectBus.Kafka.Consumer; +using JiShe.CollectBus.Kafka.Internal; using JiShe.CollectBus.Kafka.Producer; using Microsoft.Extensions.Configuration; @@ -24,11 +26,11 @@ namespace JiShe.CollectBus.Kafka.Test { // 每批消息数量 - [Params(1000, 10000, 100000)] + [Params(1000, 10000, 100000, 1000000)] public int N; public ServiceProvider _serviceProvider; - public IConsumerService _consumerService; - public IProducerService _producerService; + public IConsumerService _consumerService; + public IProducerService _producerService; public string topic = "test-topic1"; [GlobalSetup] @@ -40,13 +42,22 @@ namespace JiShe.CollectBus.Kafka.Test .AddJsonFile("appsettings.json") .Build(); // 直接读取配置项 - var greeting = config["ServerTagName"]; + var greeting = config["Kafka:ServerTagName"]; Console.WriteLine(greeting); // 输出: Hello, World! // 创建服务容器 var services = new ServiceCollection(); // 注册 IConfiguration 实例 services.AddSingleton(config); + services.Configure(options => + { + config.GetSection("Kafka").Bind(options); + }); + services.Configure(options => + { + config.GetSection(nameof(ServerApplicationOptions)).Bind(options); + }); + // 初始化日志 Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(config) // 从 appsettings.json 读取配置 @@ -61,6 +72,8 @@ namespace JiShe.CollectBus.Kafka.Test services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); + services.AddSingleton(); + services.AddTransient(); // 构建ServiceProvider _serviceProvider = services.BuildServiceProvider(); @@ -72,10 +85,10 @@ namespace JiShe.CollectBus.Kafka.Test var adminClientService = _serviceProvider.GetRequiredService(); - + //await adminClientService.DeleteTopicAsync(topic); // 创建 topic - adminClientService.CreateTopicAsync(topic, 3, 3).ConfigureAwait(false).GetAwaiter(); + //adminClientService.CreateTopicAsync(topic, 3, 3).ConfigureAwait(false).GetAwaiter(); _consumerService = _serviceProvider.GetRequiredService(); @@ -100,9 +113,9 @@ namespace JiShe.CollectBus.Kafka.Test List tasks = new(); for (int i = 0; i < N; ++i) { - var task = _producerService.ProduceAsync(topic, i.ToString(),null); + var task = _producerService.ProduceAsync(topic, i.ToString(), null); } await Task.WhenAll(tasks); } - } + } } diff --git a/modules/JiShe.CollectBus.Kafka.Test/Lib/JiShe.CollectBus.Common.dll b/modules/JiShe.CollectBus.Kafka.Test/Lib/JiShe.CollectBus.Common.dll new file mode 100644 index 0000000000000000000000000000000000000000..5d9bd8d55de07a0ca6198b496f63f3c3194da2d2 GIT binary patch literal 171008 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

IdoP*dxLH(c)gV<6*!B8)O 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� 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 @@ -58,7 +51,18 @@ var host = Host.CreateDefaultBuilder(args) logging.ClearProviders(); logging.AddSerilog(); }); - services.Configure(config.GetSection("Kafka")); + //services.Configure(config.GetSection("Kafka")); + //services.Configure(config.GetSection("ServerApplicationOptions")); + var dss = config.GetSection("Kafka"); + + services.Configure(options => + { + config.GetSection("Kafka").Bind(options); + }); + services.Configure(options => + { + config.GetSection(nameof(ServerApplicationOptions)).Bind(options); + }); services.AddSingleton(); services.AddSingleton(); @@ -86,8 +90,20 @@ var host = Host.CreateDefaultBuilder(args) var loggerFactory = host.Services.GetRequiredService(); var logger = loggerFactory.CreateLogger(); logger.LogInformation("程序启动"); + + +var _kafkaPollyPipeline = host.Services.GetRequiredService(); +if (_kafkaPollyPipeline == null) +{ + logger.LogInformation("KafkaPollyPipeline未注册!"); +} + + var adminClientService = host.Services.GetRequiredService(); var configuration = host.Services.GetRequiredService(); + +var kafkaOptionConfig=host.Services.GetRequiredService>(); + string topic = ProtocolConst.TESTTOPIC; //await adminClientService.DeleteTopicAsync(topic); // 创建 topic diff --git a/modules/JiShe.CollectBus.Kafka.Test/appsettings.json b/modules/JiShe.CollectBus.Kafka.Test/appsettings.json index 9767dee..e024316 100644 --- a/modules/JiShe.CollectBus.Kafka.Test/appsettings.json +++ b/modules/JiShe.CollectBus.Kafka.Test/appsettings.json @@ -13,7 +13,8 @@ "DotNetCore.CAP": "Warning", "Serilog.AspNetCore": "Information", "Microsoft.EntityFrameworkCore": "Warning", - "Microsoft.AspNetCore": "Warning" + "Microsoft.AspNetCore": "Warning", + "Microsoft.AspNetCore.Diagnostics.HealthChecks": "Warning" } }, "WriteTo": [ @@ -34,7 +35,7 @@ "CorsOrigins": "http://localhost:4200,http://localhost:3100" }, "ConnectionStrings": { - "Default": "mongodb://admin:admin02023@118.190.144.92:37117,118.190.144.92:37119,118.190.144.92:37120/JiSheCollectBus?authSource=admin&maxPoolSize=400&minPoolSize=10&waitQueueTimeoutMS=5000", + "Default": "mongodb://mongo_PmEeF3:lixiao1980@192.168.1.9:27017/JiSheCollectBus?authSource=admin&maxPoolSize=400&minPoolSize=10&waitQueueTimeoutMS=5000", "Kafka": "192.168.1.9:29092,192.168.1.9:39092,192.168.1.9:49092", "PrepayDB": "server=118.190.144.92;database=jishe.sysdb;uid=sa;pwd=admin@2023;Encrypt=False;Trust Server Certificate=False", "EnergyDB": "server=118.190.144.92;database=db_energy;uid=sa;pwd=admin@2023;Encrypt=False;Trust Server Certificate=False" @@ -43,7 +44,7 @@ "Configuration": "192.168.1.9:6380,password=1q2w3e!@#,syncTimeout=30000,abortConnect=false,connectTimeout=30000,allowAdmin=true", "MaxPoolSize": "50", "DefaultDB": "14", - "HangfireDB": "15" + "HangfireDB": "13" }, "Jwt": { "Audience": "JiShe.CollectBus", @@ -51,16 +52,11 @@ "Issuer": "JiShe.CollectBus", "ExpirationTime": 2 }, - "HealthCheck": { + "HealthChecks": { "IsEnable": true, - "MySql": { - "IsEnable": true - }, - "Pings": { - "IsEnable": true, - "Host": "https://www.baidu.com/", - "TimeOut": 5000 - } + "HealthCheckDatabaseName": "HealthChecks", + "EvaluationTimeInSeconds": 10, + "MinimumSecondsBetweenFailureNotifications": 60 }, "SwaggerConfig": [ { @@ -74,14 +70,6 @@ "Version": "V1" } ], - "Cap": { - "RabbitMq": { - "HostName": "118.190.144.92", - "UserName": "collectbus", - "Password": "123456", - "Port": 5672 - } - }, "Kafka": { "BootstrapServers": "192.168.1.9:29092,192.168.1.9:39092,192.168.1.9:49092", "EnableFilter": true, @@ -92,48 +80,18 @@ "SaslPassword": "lixiao1980", "KafkaReplicationFactor": 3, "NumPartitions": 30, - "ServerTagName": "JiSheCollectBus99" - //"Topic": { - // "ReplicationFactor": 3, - // "NumPartitions": 1000 - //} + "ServerTagName": "JiSheCollectBus4", + "FirstCollectionTime": "2025-04-22 16:07:00" }, - //"Kafka": { - // "Connections": { - // "Default": { - // "BootstrapServers": "192.168.1.9:29092,192.168.1.9:39092,192.168.1.9:49092" - // // "SecurityProtocol": "SASL_PLAINTEXT", - // // "SaslMechanism": "PLAIN", - // // "SaslUserName": "lixiao", - // // "SaslPassword": "lixiao1980", - // } - // }, - // "Consumer": { - // "GroupId": "JiShe.CollectBus" - // }, - // "Producer": { - // "MessageTimeoutMs": 6000, - // "Acks": -1 - // }, - // "Topic": { - // "ReplicationFactor": 3, - // "NumPartitions": 1000 - // }, - // "EventBus": { - // "GroupId": "JiShe.CollectBus", - // "TopicName": "DefaultTopicName" - // } - //}, "IoTDBOptions": { "UserName": "root", "Password": "root", "ClusterList": [ "192.168.1.9:6667" ], - "PoolSize": 2, + "PoolSize": 32, "DataBaseName": "energy", "OpenDebugMode": true, "UseTableSessionPoolByDefault": false }, - "ServerTagName": "JiSheCollectBus3", "Cassandra": { "ReplicationStrategy": { "Class": "NetworkTopologyStrategy", //策略为NetworkTopologyStrategy时才会有多个数据中心,SimpleStrategy用在只有一个数据中心的情况下 @@ -156,6 +114,12 @@ "Port": 9043, "DataCenter": "dc1", "Rack": "RAC2" + }, + { + "Host": "192.168.1.9", + "Port": 9044, + "DataCenter": "dc1", + "Rack": "RAC2" } ], "Username": "admin", @@ -176,5 +140,17 @@ "SerialConsistencyLevel": "Serial", "DefaultIdempotence": true } - } + }, + "ServerApplicationOptions": { + "ServerTagName": "JiSheCollectBus4", + "SystemType": "Energy", + "FirstCollectionTime": "2025-04-28 15:07:00", + "AutomaticVerificationTime": "16:07:00", + "AutomaticTerminalVersionTime": "17:07:00", + "AutomaticTelematicsModuleTime": "17:30:00", + "AutomaticDayFreezeTime": "02:30:00", + "AutomaticMonthFreezeTime": "03:30:00", + "DefaultProtocolPlugin": "T37612012ProtocolPlugin" + }, + "PlugInFolder": "" } \ No newline at end of file diff --git a/modules/JiShe.CollectBus.Kafka/Internal/KafkaPollyPipeline.cs b/modules/JiShe.CollectBus.Kafka/Internal/KafkaPollyPipeline.cs index c467921..9750f86 100644 --- a/modules/JiShe.CollectBus.Kafka/Internal/KafkaPollyPipeline.cs +++ b/modules/JiShe.CollectBus.Kafka/Internal/KafkaPollyPipeline.cs @@ -1,16 +1,8 @@ using Confluent.Kafka; +using Microsoft.Extensions.Logging; +using Polly; using Polly.CircuitBreaker; using Polly.Retry; -using Polly; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Polly.Contrib.WaitAndRetry; -using Volo.Abp.DependencyInjection; -using Microsoft.Extensions.Logging; -using JiShe.CollectBus.Kafka.Producer; namespace JiShe.CollectBus.Kafka.Internal { diff --git a/protocols/JiShe.CollectBus.Protocol.T37612012/AnalysisData/DataStorage.cs b/protocols/JiShe.CollectBus.Protocol.T37612012/AnalysisData/DataStorage.cs index 1313fab..7dec01c 100644 --- a/protocols/JiShe.CollectBus.Protocol.T37612012/AnalysisData/DataStorage.cs +++ b/protocols/JiShe.CollectBus.Protocol.T37612012/AnalysisData/DataStorage.cs @@ -96,7 +96,7 @@ namespace JiShe.CollectBus.Protocol.T37612012.AnalysisData if (taskData != null) { // 更新 - meter.Timestamps = taskData.Timestamps; + meter.Timestamps = taskData.PendingCopyReadTime.GetDateTimeOffset().ToUnixTimeNanoseconds(); taskData.IsReceived=true; taskData.ReceivedMessageHexString= analysisBaseDto.HexMessage; taskData.ReceivedMessageId= analysisBaseDto.MessageId ?? string.Empty; @@ -197,7 +197,7 @@ namespace JiShe.CollectBus.Protocol.T37612012.AnalysisData if (taskData != null) { // 更新 - meter.Timestamps = taskData.Timestamps; + meter.Timestamps = taskData.PendingCopyReadTime.GetDateTimeOffset().ToUnixTimeNanoseconds(); taskData.IsReceived = true; taskData.ReceivedMessageHexString = analysisBaseDto.HexMessage; taskData.ReceivedMessageId = analysisBaseDto.MessageId ?? string.Empty; From a97421a00ecefcdb485dc0705fe6773ddade92c0 Mon Sep 17 00:00:00 2001 From: zenghongyao <873884283@qq.com> Date: Wed, 30 Apr 2025 10:35:26 +0800 Subject: [PATCH 2/2] =?UTF-8?q?kafka=20=E8=AE=A2=E9=98=85=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E5=88=86=E5=8C=BA=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/JiShe.CollectBus.Kafka/KafkaSubscribeExtensions.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/modules/JiShe.CollectBus.Kafka/KafkaSubscribeExtensions.cs b/modules/JiShe.CollectBus.Kafka/KafkaSubscribeExtensions.cs index 3c50aae..a0438db 100644 --- a/modules/JiShe.CollectBus.Kafka/KafkaSubscribeExtensions.cs +++ b/modules/JiShe.CollectBus.Kafka/KafkaSubscribeExtensions.cs @@ -137,13 +137,11 @@ namespace JiShe.CollectBus.Kafka foreach (var sub in subscribedMethods) { - int partitionCount = 3;// kafkaOptionConfig.NumPartitions; -#if DEBUG + int partitionCount = sub.Attribute!.TaskCount==-1?3: sub.Attribute!.TaskCount;// kafkaOptionConfig.NumPartitions; var adminClientService = provider.GetRequiredService(); int topicCount = adminClientService.GetTopicPartitionsNum(sub.Attribute!.Topic); partitionCount = partitionCount > topicCount ? topicCount : partitionCount; -#endif - //int partitionCount = sub.Attribute!.TaskCount==-1?adminClientService.GetTopicPartitionsNum(sub.Attribute!.Topic) : sub.Attribute!.TaskCount; + //partitionCount = sub.Attribute!.TaskCount == -1 ? adminClientService.GetTopicPartitionsNum(sub.Attribute!.Topic) : sub.Attribute!.TaskCount; if (partitionCount <= 0) partitionCount = 1; for (int i = 0; i < partitionCount; i++)