dev #2
@ -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": {
|
||||||
|
|||||||
@ -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"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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}线程");
|
||||||
});
|
});
|
||||||
|
|||||||
@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user