# 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
}
}
}