网关多实例改造: Owl/MC4配置数组化 遍历注册+动态AdapterTypes

This commit is contained in:
2026-05-17 15:00:49 +08:00
parent f9eeeed843
commit 45fe1e452a
2 changed files with 58 additions and 27 deletions

View File

@@ -31,8 +31,6 @@ var app = builder.Build();
// ── 读取配置 ── // ── 读取配置 ──
var gwCfg = app.Configuration.GetSection("Gateway"); var gwCfg = app.Configuration.GetSection("Gateway");
var owlCfg = app.Configuration.GetSection("Owl");
var mc4Cfg = app.Configuration.GetSection("MC4");
// ── 创建适配器注册中心 ── // ── 创建适配器注册中心 ──
var registry = new AdapterRegistry(); var registry = new AdapterRegistry();
@@ -42,27 +40,34 @@ var volProUrl = gwCfg["VolProBaseUrl"] ?? "http://localhost:9100";
var httpFactory = app.Services.GetRequiredService<IHttpClientFactory>(); var httpFactory = app.Services.GetRequiredService<IHttpClientFactory>();
var clientFactory = new GatewayClientFactory(httpFactory, volProUrl); var clientFactory = new GatewayClientFactory(httpFactory, volProUrl);
// ── 注册 OwlAdapter ── // ── 注册 OwlAdapter(多实例遍历)──
var owlHttp = app.Services.GetRequiredService<IHttpClientFactory>().CreateClient("VolPro"); var owlList = app.Configuration.GetSection("Owl").Get<List<OwlConfig>>() ?? new();
var owlAdapter = new IntegrationGateway.Adapters.Owl.OwlAdapter( foreach (var o in owlList)
"Owl:main", owlHttp, {
owlCfg["BaseUrl"] ?? "http://localhost:15123", var code = $"Owl:{o.InstanceName ?? "default"}";
owlCfg["Username"] ?? "admin", var a = new IntegrationGateway.Adapters.Owl.OwlAdapter(code,
owlCfg["Password"] ?? "admin" app.Services.GetRequiredService<IHttpClientFactory>().CreateClient("VolPro"),
); o.BaseUrl, o.Username, o.Password);
registry.Register(owlAdapter); registry.Register(a);
}
// ── 注册 MC4Adapter ── // ── 注册 MC4Adapter(多实例遍历)──
var mc4Http = app.Services.GetRequiredService<IHttpClientFactory>().CreateClient("VolPro"); var mc4List = app.Configuration.GetSection("MC4").Get<List<Mc4Config>>() ?? new();
var mc4Adapter = new IntegrationGateway.Adapters.MC4.Mc4Adapter( foreach (var m in mc4List)
"MC4:31ku", mc4Http, {
mc4Cfg["BaseUrl"] ?? "http://localhost:3000" var code = $"MC4:{m.InstanceName ?? "default"}";
); var a = new IntegrationGateway.Adapters.MC4.Mc4Adapter(code,
registry.Register(mc4Adapter); app.Services.GetRequiredService<IHttpClientFactory>().CreateClient("VolPro"),
m.BaseUrl);
registry.Register(a);
}
// ── 动态拼接 AdapterTypes 字符串 ──
var adapterTypes = string.Join(",", registry.All.Select(a => a.AdapterCode));
// ── 并行初始化所有适配器 ── // ── 并行初始化所有适配器 ──
await registry.InitializeAllAsync(); await registry.InitializeAllAsync();
Console.WriteLine($"[Gateway] {registry.All.Count} 个适配器已注册"); Console.WriteLine($"[Gateway] {registry.All.Count} 个适配器已注册: {adapterTypes}");
// ═══════════════════════════════════════════════════════════════ // ═══════════════════════════════════════════════════════════════
// B 组路由(管理端 / Vol.Pro → 网关) // B 组路由(管理端 / Vol.Pro → 网关)
@@ -207,6 +212,26 @@ app.MapPost("/api/gateway/devices/sync", async (string adapter) =>
app.Run(); app.Run();
// ═══════════════════════════════════════════════
// 配置 POCO
// ═══════════════════════════════════════════════
/// <summary>Owl 适配器配置项</summary>
public class OwlConfig
{
public string? InstanceName { get; set; }
public string BaseUrl { get; set; } = "";
public string Username { get; set; } = "admin";
public string Password { get; set; } = "admin";
}
/// <summary>MC4.0 适配器配置项</summary>
public class Mc4Config
{
public string? InstanceName { get; set; }
public string BaseUrl { get; set; } = "";
}
// ═══════════════════════════════════════════════ // ═══════════════════════════════════════════════
// B 组请求 DTO // B 组请求 DTO
// ═══════════════════════════════════════════════ // ═══════════════════════════════════════════════

View File

@@ -5,14 +5,20 @@
"Microsoft.AspNetCore": "Warning" "Microsoft.AspNetCore": "Warning"
} }
}, },
"Owl": { "Owl": [
"BaseUrl": "http://localhost:15123", {
"Username": "admin", "InstanceName": "main",
"Password": "your_owl_password" "BaseUrl": "http://localhost:15123",
}, "Username": "admin",
"MC4": { "Password": "your_owl_password"
"BaseUrl": "http://localhost:3000" }
}, ],
"MC4": [
{
"InstanceName": "31ku",
"BaseUrl": "http://localhost:3000"
}
],
"Gateway": { "Gateway": {
"VolProBaseUrl": "http://localhost:9100", "VolProBaseUrl": "http://localhost:9100",
"NodeCode": "gw-31ku", "NodeCode": "gw-31ku",