#region 服务注册
public static IApplicationBuilder UseConsulRegister(this IApplicationBuilder app, IConfiguration configuration)
{
var consulClient = new ConsulClient(config =>
{
config.Address = new Uri(configuration["consul_address"]);
config.Token = configuration["consul_token"];
});
var service = new Uri(configuration["Service:Uri"]);
Serilog.Log.Information(service.AbsoluteUri);
var registration = new AgentServiceRegistration()
{
ID = Guid.NewGuid().ToString(),
Name = configuration["Service:Name"],
Address = service.Host,
Port = service.Port,
Check = new AgentServiceCheck()
{
DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5), //服务启动多久后注册
Interval = TimeSpan.FromSeconds(10), // 健康检查时间间隔
HTTP = configuration["Service:HealthCheck"], // 健康检查地址
Timeout = TimeSpan.FromSeconds(5) // 超时时间
}
};
// 服务注册
consulClient.Agent.ServiceRegister(registration).Wait();
// 应用程序终止时,取消注册
var lifetime = app.ApplicationServices.GetRequiredService<IHostApplicationLifetime>();
lifetime.ApplicationStopping.Register(() =>
{
consulClient.Agent.ServiceDeregister(registration.ID).Wait();
});
return app;
}
#endregion 服务注册