consul是一个服务的管理者,用来服务注册 提供 消费
下载地址
https://www.consul.io/downloads.html
运行
consul.exe agent -dev 这是开发环境测试,生产环境要建集群,要至少一台 Server,多台 Agent。 开发环境中 consul 重启后数据就会丢失。
consul启动后默认的端口是8500 这时候就可以访问 http://127.0.0.1:8500/
consul 主要做三件事:
- 提供服务到 ip 地址的注册;
- 提供服务到 ip 地址列表的查询;
- 对提供服务方的健康检查(HealthCheck);
.netCore 中的配置
Install-Package Consul
心跳检测
consul会定时向这个地址请求,证明这个服务还“有心跳” 还活着而不是已经关闭
[Route("api/[controller]")]
public class HealthController : Controller
{
[HttpGet]
public IActionResult Get() {
return Ok("ok");
}
}
在Configure注册
//服务名字
var serviceName = "MsgService";
var serviceId = serviceName + Guid.NewGuid();
using (var consulClient = new ConsulClient(m =>
{
m.Address = new Uri("http://127.0.0.1:8500");
m.Datacenter = "dcl";
}))
{
consulClient.Agent.ServiceRegister(new AgentServiceRegistration
{
Address = ip,
Port= Convert.ToInt32(port),
ID=serviceId,
Name=serviceName,
Check =new AgentServiceCheck
{
DeregisterCriticalServiceAfter=TimeSpan.FromSeconds(5),
HTTP=$"http://{ip}:{port}/api/Health",
Interval=TimeSpan.FromSeconds(10),
Timeout=TimeSpan.FromSeconds(5)
}
}).Wait();
}
终止服务
在Configure 中注入IApplicationLifetime 在服务停止的时候注销该服务
//服务停止
applicationLifetime.ApplicationStopped.Register(() =>
{
using (var consulClient = new ConsulClient())
{
Console.WriteLine("应用退出了");
consulClient.Agent.ServiceDeregister(serviceId).Wait();
}
});