using Consul; using Furion; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { public class ConsulApplicationComponent : IApplicationComponent { public void Load(IApplicationBuilder app, IWebHostEnvironment env, ComponentContext componentContext) { var consulClient = app.ApplicationServices.GetRequiredService(); var lifetime = app.ApplicationServices.GetRequiredService(); // 服务配置(从appsettings.json读取) var serviceName = App.Configuration["Consul:ServiceName"] ?? "UnknownService"; var serviceHost = App.Configuration["Consul:ServiceIP"] ?? "localhost"; var servicePort = int.Parse(App.Configuration["Consul:ServicePort"]); // 或直接用启动端口 // 服务唯一ID(避免同一服务多实例冲突) var serviceId = $"{serviceName}-{serviceHost}-{servicePort}"; // 服务注册信息 var registration = new AgentServiceRegistration { ID = serviceId, Name = serviceName, Address = serviceHost, Port = servicePort, // 健康检查配置 Check = new AgentServiceCheck { HTTP = $"http://{serviceHost}:{servicePort}{App.Configuration["Consul:ServiceHealthCheck"]}", Interval = TimeSpan.FromSeconds(10), Timeout = TimeSpan.FromSeconds(5), DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(30) } }; // 注册服务 consulClient.Agent.ServiceRegister(registration).Wait(); // 应用停止时注销服务 lifetime.ApplicationStopping.Register(() => { consulClient.Agent.ServiceDeregister(serviceId).Wait(); }); } } }