dev #2

Merged
admin merged 176 commits from dev into master 2025-04-18 01:31:49 +00:00
4 changed files with 86 additions and 53 deletions
Showing only changes of commit fa18377f10 - Show all commits

View File

@ -86,8 +86,8 @@
"BootstrapServers": "192.168.1.9:29092,192.168.1.9:39092,192.168.1.9:49092", "BootstrapServers": "192.168.1.9:29092,192.168.1.9:39092,192.168.1.9:49092",
"EnableFilter": true, "EnableFilter": true,
"EnableAuthorization": false, "EnableAuthorization": false,
"SecurityProtocol": "SASL_PLAINTEXT", "SecurityProtocol": "SaslPlaintext",
"SaslMechanism": "PLAIN", "SaslMechanism": "Plain",
"SaslUserName": "lixiao", "SaslUserName": "lixiao",
"SaslPassword": "lixiao1980" "SaslPassword": "lixiao1980"
//"Topic": { //"Topic": {

View File

@ -35,38 +35,38 @@ namespace JiShe.CollectBus.Kafka
{ {
var app = context.GetApplicationBuilder(); var app = context.GetApplicationBuilder();
// 程序运行目录 // 程序运行目录
var assemblyPath = Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location); //var assemblyPath = Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location);
if (!string.IsNullOrWhiteSpace(assemblyPath)) //if (!string.IsNullOrWhiteSpace(assemblyPath))
{ //{
var dllFiles = Directory.GetFiles(assemblyPath, "*.dll"); // var dllFiles = Directory.GetFiles(assemblyPath, "*.dll");
var kafkaSubscriberAssemblies = new List<Assembly>(); // var kafkaSubscriberAssemblies = new List<Assembly>();
foreach (var file in dllFiles) // foreach (var file in dllFiles)
{ // {
try // try
{ // {
// 跳过已加载的程序集 // // 跳过已加载的程序集
var assemblyName = AssemblyName.GetAssemblyName(file); // var assemblyName = AssemblyName.GetAssemblyName(file);
var existingAssembly = AppDomain.CurrentDomain.GetAssemblies() // var existingAssembly = AppDomain.CurrentDomain.GetAssemblies()
.FirstOrDefault(a => a.GetName().FullName == assemblyName.FullName); // .FirstOrDefault(a => a.GetName().FullName == assemblyName.FullName);
var assembly = existingAssembly ?? Assembly.LoadFrom(file); // var assembly = existingAssembly ?? Assembly.LoadFrom(file);
// 检查程序集是否包含 IKafkaSubscribe 的实现类 // // 检查程序集是否包含 IKafkaSubscribe 的实现类
var hasSubscriber = assembly.GetTypes() // var hasSubscriber = assembly.GetTypes()
.Any(type => // .Any(type =>
typeof(IKafkaSubscribe).IsAssignableFrom(type) && // 实现接口 // typeof(IKafkaSubscribe).IsAssignableFrom(type) && // 实现接口
!type.IsAbstract && !type.IsInterface); // 排除抽象类和接口本身 // !type.IsAbstract && !type.IsInterface); // 排除抽象类和接口本身
if (hasSubscriber) // if (hasSubscriber)
{ // {
kafkaSubscriberAssemblies.Add(assembly); // kafkaSubscriberAssemblies.Add(assembly);
} // }
} // }
catch{} // catch{}
app.UseKafkaSubscribers(kafkaSubscriberAssemblies.ToArray()); // app.UseKafkaSubscribers(kafkaSubscriberAssemblies.ToArray());
} // }
} //}
// 获取程序集 // 获取程序集
//app.UseKafkaSubscribers(new[] { Assembly.Load("JiShe.CollectBus.Application")}); app.UseKafkaSubscribers(Assembly.Load("JiShe.CollectBus.Application"));
} }
} }
} }

View File

@ -12,12 +12,47 @@ namespace JiShe.CollectBus.Kafka
{ {
public static class KafkaSubcribesExtensions public static class KafkaSubcribesExtensions
{ {
/// <summary> ///// <summary>
/// 添加Kafka订阅 ///// 添加Kafka订阅
/// </summary> ///// </summary>
/// <param name="app"></param> ///// <param name="app"></param>
/// <param name="assembly"></param> ///// <param name="assembly"></param>
public static void UseKafkaSubscribers(this IApplicationBuilder app, Assembly[] assemblys) //public static void UseKafkaSubscribers(this IApplicationBuilder app, Assembly[] assemblys)
//{
// var provider = app.ApplicationServices;
// var lifetime = provider.GetRequiredService<IHostApplicationLifetime>();
// lifetime.ApplicationStarted.Register(() =>
// {
// var logger = provider.GetRequiredService<ILogger<CollectBusKafkaModule>>();
// int threadCount = 0;
// int topicCount = 0;
// foreach (Assembly assembly in assemblys)
// {
// var subscribeTypes = assembly.GetTypes()
// .Where(t => typeof(IKafkaSubscribe).IsAssignableFrom(t))
// .ToList();
// if (subscribeTypes.Count == 0) return;
// foreach (var subscribeType in subscribeTypes)
// {
// var subscribes = provider.GetServices(subscribeType).ToList();
// subscribes.ForEach(subscribe => {
// if (subscribe is IKafkaSubscribe)
// {
// Tuple<int, int> tuple = BuildKafkaSubscriber(subscribe, provider, logger);
// threadCount += tuple.Item1;
// topicCount += tuple.Item2;
// }
// });
// }
// }
// logger.LogInformation($"kafka订阅主题:{topicCount}数,共启动:{threadCount}线程");
// });
//}
public static void UseKafkaSubscribers(this IApplicationBuilder app, Assembly assembly)
{ {
var provider = app.ApplicationServices; var provider = app.ApplicationServices;
var lifetime = provider.GetRequiredService<IHostApplicationLifetime>(); var lifetime = provider.GetRequiredService<IHostApplicationLifetime>();
@ -27,26 +62,23 @@ namespace JiShe.CollectBus.Kafka
var logger = provider.GetRequiredService<ILogger<CollectBusKafkaModule>>(); var logger = provider.GetRequiredService<ILogger<CollectBusKafkaModule>>();
int threadCount = 0; int threadCount = 0;
int topicCount = 0; int topicCount = 0;
foreach (Assembly assembly in assemblys) var subscribeTypes = assembly.GetTypes()
{
var subscribeTypes = assembly.GetTypes()
.Where(t => typeof(IKafkaSubscribe).IsAssignableFrom(t)) .Where(t => typeof(IKafkaSubscribe).IsAssignableFrom(t))
.ToList(); .ToList();
if (subscribeTypes.Count == 0) return; if (subscribeTypes.Count == 0) return;
foreach (var subscribeType in subscribeTypes) foreach (var subscribeType in subscribeTypes)
{ {
var subscribes = provider.GetServices(subscribeType).ToList(); var subscribes = provider.GetServices(subscribeType).ToList();
subscribes.ForEach(subscribe => { subscribes.ForEach(subscribe => {
if (subscribe is IKafkaSubscribe) if (subscribe is IKafkaSubscribe)
{ {
Tuple<int, int> tuple = BuildKafkaSubscriber(subscribe, provider, logger); Tuple<int, int> tuple = BuildKafkaSubscriber(subscribe, provider, logger);
threadCount += tuple.Item1; threadCount += tuple.Item1;
topicCount += tuple.Item2; topicCount += tuple.Item2;
} }
}); });
}
} }
logger.LogInformation($"kafka订阅主题:{topicCount}数,共启动:{threadCount}线程"); logger.LogInformation($"kafka订阅主题:{topicCount}数,共启动:{threadCount}线程");
}); });

View File

@ -12,6 +12,7 @@ using JiShe.CollectBus.IotSystems.MessageReceiveds;
using JiShe.CollectBus.IotSystems.Protocols; using JiShe.CollectBus.IotSystems.Protocols;
using MassTransit; using MassTransit;
using DotNetCore.CAP; using DotNetCore.CAP;
using JiShe.CollectBus.Kafka.Producer;
namespace JiShe.CollectBus.Protocol.Contracts.Abstracts namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
{ {