一、Consul概述

consul是一个开源的使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)

我们为了服务的高可用,往往会搭建集群,并且这些集群是不固定的。举个例子淘宝平时1000台服务器就能满足需求,但是双11期间可能需要扩充到10000万台服务器,等双11过去后,再裁减到1000台。我们总不能在上端程序(客户端)配置这么多服务器的ip地址吧。服务器的添加和删除都得更新上端程序代码,这显然是不现实的。我们引入Consul就能解决这一问题,上端程序需要调用服务时,无需知道有多少天服务器,服务器端口设计什么,直接调用Consul,由Consul为我们调用具体的服务即服发现。我们每增添获删除一个服务器,都会告知Consul,这叫服务的注册。如果某个服务器挂掉了怎么办呢?Consul有健康检查的功能,他会定时询问服务是否正常,如果不正常会断开连接,上端程序就不会调用到挂掉的服务器而报错。

二、Consul安装

下载地址

官网:https://www.consul.io/

官网下载较慢,这里提供下免费下载地址:https://download.csdn.net/download/xiaolu1014/12253778

运行

consul_1.6.2.exe agent -dev

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

三、服务注册

服务端添加扩展方法

using Consul;
using Microsoft.Extensions.Configuration;
using System;namespace ConsulService.Extensions
{public class ConsulHeper{public static void UseConsul(IConfiguration configuration){ConsulClient client = new ConsulClient(c =>{c.Address = new Uri("http://localhost:8500/");c.Datacenter = "dc1";});string ip = configuration["ip"];//命令行参数必须传入ipint port = int.Parse(configuration["port"]);//命令行参数必须传入端口client.Agent.ServiceRegister(new AgentServiceRegistration(){ID = Guid.NewGuid().ToString(),//唯一的Name = "TestService",//组名称-GroupAddress = ip,//其实应该写ip地址Port = port,//不同实例Tags = null});}}
}

Startup

找到项目所在文件目录cmd,通过命令行启动多个程序,分别为6666端口、7777端口、8888端口

dotnet Cluster.dll --urls="http://*:6666" --ip="127.0.0.1" --port=6666
dotnet Cluster.dll --urls="http://*:7777" --ip="127.0.0.1" --port=7777
dotnet Cluster.dll --urls="http://*:8888" --ip="127.0.0.1" --port=8888

然后进入Consul监控页面会发现三个TestServer的服务实例证明我们的服务已经成功注册

四、服务发现

我们已经把集群服务注册到了Consul中,那么下一步要做的就是让调用端发现服务

using (ConsulClient client = new ConsulClient(c =>{c.Address = new Uri("http://localhost:8500/");c.Datacenter = "dc1";}))var dictionary = client.Agent.Services().Result.Response;foreach (var keyValuePair in dictionary){AgentService agentService = keyValuePair.Value;this._logger.LogWarning($"{agentService.Address}:{agentService.Port} {agentService.ID} {agentService.Service}");}

五、健康检查

健康检查也叫心跳检查,顾名思义就是类似心跳在一定的时间间隔去访问下服务端,如果服务端没有响应即判定该服务死亡,然后把它从Consul中剔除,这样我们的调用端就不会请求到已经死亡的服务了。

健康检查是一个持续频繁的访问,所以不能对真实的业务逻辑进行检测,我们可以建一个新的控制器用于响应健康检查。

        public IActionResult Index(){return Ok();//HttpStatusCode--200}

新建一个方法,返回Ok()即http状态码200 即可。

修改之前的服务注册代码,加入健康检测代码

using Consul;
using Microsoft.Extensions.Configuration;
using System;namespace ConsulService.Extensions
{public class ConsulHeper{public static void UseConsul(IConfiguration configuration){ConsulClient client = new ConsulClient(c =>{c.Address = new Uri("http://localhost:8500/");c.Datacenter = "dc1";});string ip = configuration["ip"];//命令行参数必须传入ipint port = int.Parse(configuration["port"]);//命令行参数必须传入端口client.Agent.ServiceRegister(new AgentServiceRegistration(){ID = Guid.NewGuid().ToString(),//唯一的Name = "TestService",//组名称-GroupAddress = ip,//其实应该写ip地址Port = port,//不同实例Tags = null, Check = new AgentServiceCheck(){Interval = TimeSpan.FromSeconds(12),HTTP = $"http://{ip}:{port}/Api/Health/Index",Timeout = TimeSpan.FromSeconds(5),DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5)}});}}
}

Consul服务注册发现与健康检查相关推荐

  1. .NET Core 使用 Consul 服务注册发现

    Consul是一个用来实现分布式系统服务发现与配置的开源工具.它内置了服务注册与发现框架.分布一致性协议实现.健康检查.Key/Value存储.多数据中心方案,不再需要依赖其他工具,使用起来也较为简单 ...

  2. ASP.NET Core gRPC 使用 Consul 服务注册发现

    一. 前言 gRPC 在当前最常见的应用就是在微服务场景中,所以不可避免的会有服务注册与发现问题,我们使用gRPC实现的服务可以使用 Consul 或者 etcd 作为服务注册与发现中心,本文主要介绍 ...

  3. 深入浅出RPC---4、服务注册发现和健康监测

    服务注册发现 服务注册发现的作用 感知服务端的变化,获取最新服务节点的连接信息. 服务注册发现的处理流程 **服务注册:**服务提供方将对外暴露的接口发布到注册中心内,注册中心为了检测服务的有效状态, ...

  4. consul集群搭建,配合nginx完成服务动态发现和健康检查

    1.概述 1.1 介绍 consul是一个服务发现和配置共享的服务软件,结合nginx的主动健康检查模块nginx_upstream_check_module和服务发现模块nginx-upsync-m ...

  5. consul服务注册与健康检查

    consul服务注册与健康检查(centos7) consul简介 consul的服务注册 服务的健康检查 服务查询发现 服务过滤 consul简介 用于实现分布式系统的服务发现与配置.Consul ...

  6. 微服务注册发现集群搭建——Registrator + Consul + Consul-template + nginx

    在互联网应用领域,服务的动态性需求十分常见,这就对服务的自动发现和可动态扩展提出了很高的要求. 微服务系统动辄上万个服务,而且还要动态伸缩.以人工写好的IP.Port 硬编码脚本的方式无法做到大规模自 ...

  7. k8s consul 服务发现_Swoft之服务注册发现Consul服务器配置

    Consul服务器配置 微服务带来最大的好处就是把整个大项目分割成不同的服务,运行在不同服务器上,实现解耦和分布式处理.微服务虽然有很多好处,但是也会有不好的一方面.任何事物都会有两面性,在微服务里面 ...

  8. python consul配置中心_微服务注册发现配置中心-consul

    Consul详解 近期在微服务业务中用的注册中心,在此简单记录下以备后用. 一 概述 1.1 概念 Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置.Con ...

  9. SpringCloud从入门到放弃 03 ——Consul服务注册与发现

    文章目录 SpringCloud从入门到放弃 03 --Consul服务注册与发现 一.Consul简介 1.什么是consul 2.consul能做什么 二.安装并运行Consul 1.下载安装 2 ...

最新文章

  1. buuctf N种方法解决
  2. FXRibbon 1.2版发布
  3. grep v grep_使用grep4j轻松测试分布式组件上的SLA
  4. 确定进制(信息学奥赛一本通-T1413)
  5. 论文解读丨图神经网络应用于半结构化文档的命名实体识别和关系提取
  6. 高德地图开启迪士尼赠票活动 带您开启迪士尼圆梦之旅
  7. idea 切换git仓库_Idea切换git分支及合并
  8. phpcmsv9全站搜索,不限模型
  9. cmd批量修改文件名 增加文字_Windows批处理脚本:以批量修改文件名为例
  10. 计算机二级C语言考试题库软件
  11. 计算机组成模型机的视频教学,3CPU 3设计模型机 罗克露计算机组成原理课件(绝对与网上视频教程同步).pdf...
  12. cad插入块_CAD施工制图常见问答(一)
  13. PS透明婚纱抠图(超详细)
  14. Filter过滤器:使用过滤器保护指定资源,只有登录用户才能访问。若访问内容时用户没有登录则跳转到登录页面。
  15. STM32学习记录0010——TFTLCD液晶显示屏
  16. 神经网络井字棋AI对战版的开发与测试
  17. 想成为魅力十足的人的十大习惯
  18. domino处理ajax传中文或特殊字符问题
  19. 浏览器主页进来是hao123
  20. IDEA 隐藏窗口标题栏(去掉 Win10 白色标题栏)

热门文章

  1. ZylGPSReceiver3.8x版本crack, PC的NMEA兼容接收器
  2. Android_控制闪光灯
  3. COM组件返回二维数组供javascript和客户端使用
  4. USACO 6.5.3 Betsy's Tour 搜索剪枝
  5. linux x64 参数传递,linux x64 gdb 调试学习笔记
  6. Java中的静态变量静态方法
  7. 如何设计一个敏感词匹配系统?
  8. hive推送数据到mysql/oracle等数据库问题
  9. c语言bool使用时要先声明
  10. lua怎么嵌入php,在嵌入式设备上使用lua实现cgi的方法