微服务入门03 Consul

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();
        }
    });
posted @ 2018-09-08 15:06  Amayer  阅读(258)  评论(0编辑  收藏  举报