Consul是注册中心,服务提供者、服务提供者、服务消费者等都要注册到Consul中,这样就可以实现服务提供者、服务消费者的隔离。

除了Consul之外,还有Eureka、Zookeeper等类似软件。

Consul就是来存储服务器名称与IP和端口对应关系的服务器

一、 consul 服务器安装

consul 下载地址     https://www.consul.io/   墙外的网站  需要***

cmd运行  consul.exe agent -dev

这是开发环境测试,生产环境要建集群,要至少一台 Server,多台 Agent  (因为如果只有一台的话,如果服务死了  整个网站就出问题了)

开发环境中 consul 重启后数据就会丢失。

consul 的监控页面 http://127.0.0.1:8500

consult 主要做三件事:提供服务到 ip 地址的注册;提供服务到 ip 地址列表的查询;对提供服务方的健康检查(HealthCheck);

二、 .Net Core 连接 consul

1.  Nuget - > Install-Package Consul   安装Consul

2.  提供一个HealthCheck API接口 用于Consul做健康检查调用,只要返回个结果就可以  不论是什么结果。如

[Route("api/[controller]")]
public class HealthController : Controller
{
     [HttpGet]
     public IActionResult Get()
     {
          return Ok("ok");
     }
}

3. 服务注册 Consul 及注销

public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime applicationLifetime)
{
     if (env.IsDevelopment())
     {
          app.UseDeveloperExceptionPage();
     } 

     app.UseMvc(); 

     string ip = Configuration["ip"];
     int port = Convert.ToInt32(Configuration["port"]); 

     string serviceName = "MsgService";    string serviceId = serviceName + Guid.NewGuid();     using (var client = new ConsulClient(ConsulConfig))
     {
          //注册服务到 Consul    ServiceRegister是一个异步方法
          client.Agent.ServiceRegister(new AgentServiceRegistration()
          {
               ID = serviceId,//服务编号,不能重复,用 Guid 最简单
               Name = serviceName,//服务的名字
               Address = ip,//服务提供者的能被消费者访问的 ip 地址(可以被其他应用访问的地址,本地测试可以用 127.0.0.1,机房环境中一定要写自己的内网 ip 地址)
               Port = port,// 服务提供者的能被消费者访问的端口
               Check = new AgentServiceCheck
               {
    DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(),//服务停止多久后反注册(注销)
                    Interval = TimeSpan.FromSeconds(),//健康检查时间间隔,或者称为心跳间隔
                    HTTP = $"http://{ip}:{port}/api/health",//健康检查地址
                    Timeout = TimeSpan.FromSeconds()
               }
          }).Wait();//Consult 客户端的所有方法几乎都是异步方法,但是都没按照规范加上Async 后缀,所以容易误导。记得调用后要 Wait()或者 await
     } 

     //程序正常退出的时候从 Consul 注销服务
     //要通过方法参数注入 IApplicationLifetime
   //程序结束的时候会调用这个方法
     applicationLifetime.ApplicationStopped.Register(()=> {
    using (var client = new ConsulClient(ConsulConfig))
          {
               client.Agent.ServiceDeregister(serviceId).Wait();
          }
     });
} 

private void ConsulConfig(ConsulClientConfiguration c)
{
     c.Address = new Uri("http://127.0.0.1:8500");
     c.Datacenter = "dc1";
} 

小哥哥 小姐姐们 如果本篇文章对你们有帮助的话 就点点右下角的推荐吧 0.0

最新文章

  1. ios基础篇(二十八)—— UITableView的上拉加载
  2. iOS不得姐项目--封装状态栏指示器(UIWindow实现)
  3. invalid types 'int[int]' for array subscrip
  4. Helo command rejected: need fully-qualified hostname
  5. 【转载】C++编译出现 error C2664: 不能将参数 2 从“const char [5]”转换为“LPCTSTR”解决办法。
  6. Html笔记(九)头标签
  7. RSA签名验签
  8. 给Select赋值 innerHTML 不兼容IE6\IE7\IE8\IE9
  9. wget命令2(转载)
  10. CSharp Oracle 登陆
  11. IDEA热部署(一)---解析关键配置。
  12. 从centos镜像创建maven仓库
  13. Linux基础命令---sar显示系统活动信息
  14. Python实现:汉诺塔问题
  15. xml模块、项目开发过程
  16. Django——权限
  17. Linux实操篇 vi和vim编辑器
  18. 鱼缸的启示:Scale-out和Scale-up架构
  19. 调试 shell script 方法
  20. oracle学习笔记一:用户管理(3)用户口令管理

热门文章

  1. innodb compressed 表碰到的问题,BUG么?
  2. Oracle EBS OPM complete batch
  3. mysql 5.5 数据库 utf8改utf8mb4
  4. MySQL客户端连接方式
  5. Configure network bonding on RHEL (Red Hat Enterprise Linux)
  6. Django之url映射
  7. Linux搭建kafka
  8. node学习笔记_02 API详解
  9. HTML5中的Canvas详解
  10. 【2018暑假集训模拟一】Day2题解