# ConsulLearn **Repository Path**: crashsol/ConsulLearn ## Basic Information - **Project Name**: ConsulLearn - **Description**: 学习使用Consul,进行服务注册、发现 和健康检查 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-04-01 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 参考链接 http://video.jessetalk.cn/course/5/task/135/show http://michaco.net/blog/ServiceDiscoveryAndHealthChecksInAspNetCoreWithConsul?tag=Consul http://ocelot.readthedocs.io/en/latest/index.html 1、 下载Consul.exe ,启动测试环境 Consul agent --dev 管理UI: http://127.0.0.1:8500 2、 添加 Consul DnsClient Nugget包的引用 3、 在Api添加 Consul Configuration配置 "ServiceDiscovery": { "ServiceName": "DataService", "Consul": { "HttpEndpoint": "http://127.0.0.1:8500", "DnsEndpoint": { "Address": "127.0.0.1", "Port": 8600 } } } 4、 Api 中添加健康检查的方法 HealthCheckController,如下 /// /// 提供给Consul做健康检查 /// [Route("[Controller]")] public class HealthCheckController : Controller { [HttpGet("")] [HttpHead("")] public IActionResult Ping() { return Ok(); } } 5、 将配置文件读取类,并将配置文件与读取类绑定 public class ServiceDisvoveryOptions { public string ServiceName { get; set; } public ConsulOptions Consul { get; set; } } public class ConsulOptions { public string HttpEndpoint { get; set; } public DnsEndpoint DnsEndpoint { get; set; } } public class DnsEndpoint { public string Address { get; set; } public int Port { get; set; } public IPEndPoint ToIPEndPoint() { return new IPEndPoint(IPAddress.Parse(Address), Port); } } 在Startup.cs 中public void ConfigureServices(IServiceCollection services) 添加绑定 services.Configure(Configuration.GetSection("ServiceDiscovery")); 6、在服务启动,向Consul进行注册,并设定健康检查条件,服务停止时,向Consul发送DeRegister,注销服务 具体参见 在Startup.cs public void Configure() 的配置 7. Ocelot 配置文件解析 { "ReRoutes": [ { "DownstreamPathTemplate": "/api/values", "DownstreamScheme": "http", "UpstreamPathTemplate": "/values", //上游请求地址 "UpstreamHttpMethod": [ "Get" ] //请求方法 "ServiceName": "TestApi", //服务发现名称, 必须和API中,向Consul 注册时一致,如果Consul 中该ServerName有多个实例,会全部获取,本例子中蒋获取 API1和API2的 IP和端口地址信息 "LoadBalancer": "LeastConnection", //负载均衡算法,Ocelotz自带 "UseServiceDiscovery": true, //是否启用服务发现,如果设置为true ,蒋检查 GlobalConfiguration是否配置Consul地址, //参见http://ocelot.readthedocs.io/en/latest/features/servicediscovery.html } ], "GlobalConfiguration": { "BaseUrl": "http://localhost:5000", //上游根地址 "ServiceDiscoveryProvider": { //Consul 服务中心配置 "Host": "localhost", //IP "Port": 8500 //Port } } }