网关多实例改造: Owl/MC4配置数组化 遍历注册+动态AdapterTypes
This commit is contained in:
@@ -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
|
||||||
// ═══════════════════════════════════════════════
|
// ═══════════════════════════════════════════════
|
||||||
|
|||||||
@@ -5,14 +5,20 @@
|
|||||||
"Microsoft.AspNetCore": "Warning"
|
"Microsoft.AspNetCore": "Warning"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Owl": {
|
"Owl": [
|
||||||
|
{
|
||||||
|
"InstanceName": "main",
|
||||||
"BaseUrl": "http://localhost:15123",
|
"BaseUrl": "http://localhost:15123",
|
||||||
"Username": "admin",
|
"Username": "admin",
|
||||||
"Password": "your_owl_password"
|
"Password": "your_owl_password"
|
||||||
},
|
}
|
||||||
"MC4": {
|
],
|
||||||
|
"MC4": [
|
||||||
|
{
|
||||||
|
"InstanceName": "31ku",
|
||||||
"BaseUrl": "http://localhost:3000"
|
"BaseUrl": "http://localhost:3000"
|
||||||
},
|
}
|
||||||
|
],
|
||||||
"Gateway": {
|
"Gateway": {
|
||||||
"VolProBaseUrl": "http://localhost:9100",
|
"VolProBaseUrl": "http://localhost:9100",
|
||||||
"NodeCode": "gw-31ku",
|
"NodeCode": "gw-31ku",
|
||||||
|
|||||||
Reference in New Issue
Block a user