1、微服務--為什麼有consul,consul註冊,心跳檢測,服務發現

一、為什麼有consul?

在微服務,每1個服務都是集群式的,訂單服務在10臺服務器上都有,那麼用戶的請求到達,獲取哪臺服務器的訂單服務呢?如果10臺中的有的訂單服務掛了怎麼辦?10臺服務器扛不住了,水平擴展又新增加了1臺服務器提供訂單服務,怎麼讓用戶請求知道有新的服務器提供服務了?這時候就需要Consul了,它能通過心跳檢測哪些服務還活著,而且有新的服務啟動,它也能主動發現

1、微服務--為什麼有consul,consul註冊,心跳檢測,服務發現

二、consul環境準備

1、consul環境

consul官網:https://www.consul.io/downloads.html,下載windows 64bit

2、啟動consul管理後臺

然後cmd啟動,注意切盤符,路徑要對,盤符切到放consul.exe的目錄,cd D:\\consul\\consul agent -dev

訪問consul管理後臺:http://localhost:8500

1、微服務--為什麼有consul,consul註冊,心跳檢測,服務發現

1、微服務--為什麼有consul,consul註冊,心跳檢測,服務發現

三、代碼實現

1、添加Webapi服務

<code>namespace ConsulServiceFind.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
private IConfiguration _IConfiguration = null;
private ILogger<valuescontroller> _logger = null;

public ValuesController(IConfiguration iConfiguration, ILogger<valuescontroller> logger)
{
_IConfiguration = iConfiguration;

_logger = logger;
}

// GET api/values
[HttpGet]
public ActionResult<ienumerable>> Get()
{
this._logger.LogWarning("ValuesController-Get 執行");
return new JsonResult(new
{
Id = 123,
Name = "david_test",
IP = this._IConfiguration["ip"],
port = this._IConfiguration["port"],
urls = this._IConfiguration["urls"],
CurrentPath = base.HttpContext.Request.Path
});
}

}
}/<ienumerable>/<valuescontroller>/<valuescontroller>/<code>

2、log4net 集成到Core

2.1、Nuget引入log4net

2.2、Nuget引入Microsoft.Extensions.Logging.Log4Net.AspNetCore

2.3、添加log4net 配置文件 (設置配置文件屬性為始終複製,默認配置文件放在根目錄下)

2.4、注入ILogger

<code>namespace ConsulServiceFind
{
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}


public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging((context, LoggingBuilder) =>//ILogger

{
LoggingBuilder.AddFilter("System", LogLevel.Warning); // 忽略系統的其他日誌
LoggingBuilder.AddFilter("Microsoft", LogLevel.Warning);
LoggingBuilder.AddLog4Net();
})
.UseStartup<startup>();
}
}/<startup>/<code>

3、網站啟動後需要consul註冊

3.1、Nuget引用consul,ConsulRegister類

<code>namespace ConsulServiceFind
{
public static class ConsulRegister
{
public static void RegistConsul(this IConfiguration configuration)
{
string ip = configuration["ip"] ?? "Localhost";
//部署到不同服務器的時候不能寫成127.0.0.1或者0.0.0.0,因為這是讓服務消費者調用的地址
int port = int.Parse(configuration["port"]);
//實例化consul客戶端
ConsulClient consulClient = new ConsulClient(c => {
c.Address = new Uri("http://127.0.0.1:8500");
c.Datacenter = "consul";
});
//向consul註冊服務
Task<writeresult> result = consulClient.Agent.ServiceRegister(new AgentServiceRegistration() {
ID = "david_webapi_test_" + Guid.NewGuid(),//服務編號,不能重複
Name = "david_webapi",//服務的名字--將來調用時用的就是這個
Address = ip,
Port = port,
Tags = new string[] { },//可以用來設置權重
Check=new AgentServiceCheck() {
DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服務停止多久後反註冊
Interval = TimeSpan.FromSeconds(10),//健康檢查時間間隔,或者稱為心跳間隔
HTTP = $"http://{ip}:{port}/api/health",//健康檢查地址,

Timeout = TimeSpan.FromSeconds(5)
}
});
}
}
}/<writeresult>/<code>

3.2、在Startup的Configure方法裡使用consul

1、微服務--為什麼有consul,consul註冊,心跳檢測,服務發現

3.3、ConsulRegister心跳檢測,添加health-check,健康檢查

<code>namespace ConsulServiceFind
{
[Route("api/[controller]")]
[ApiController]
public class HealthController : ControllerBase
{

private IConfiguration _IConfiguration = null;
private ILogger<healthcontroller> _logger = null;
public HealthController(IConfiguration configuration, ILogger<healthcontroller> logger)
{
this._IConfiguration = configuration;
this._logger = logger;
}

[HttpGet]
public IActionResult Check()
{
this._logger.LogWarning($"{this._IConfiguration["port"]}-Health Check!");
return Ok();//200
}
}
}/<healthcontroller>/<healthcontroller>/<code>

4、啟動多個WebApi實例,運行兩個WebApi服務起來

4.1、cd 切路徑--C:\\Users\\dell\\Desktop\\ConsulServiceFind\\ConsulServiceFind\\bin\\Debug\\netcoreapp2.2

4.2、通過命令行啟動2個不同端口的webapi

dotnet ConsulServiceFind.dll --urls="http://*:10010" --ip="127.0.0.1" --port=10010

dotnet ConsulServiceFind.dll --urls="http://*:10020" --ip="127.0.0.1" --port=10020

http://localhost:10010/api/values

http://localhost:10020/api/values

1、微服務--為什麼有consul,consul註冊,心跳檢測,服務發現

1、微服務--為什麼有consul,consul註冊,心跳檢測,服務發現

4.3、去http://localhost:8500查看多個服務被發現和心跳檢測

1、微服務--為什麼有consul,consul註冊,心跳檢測,服務發現

1、微服務--為什麼有consul,consul註冊,心跳檢測,服務發現

舉例和生活相結合,做一條快樂的小


原文地址:https://www.cnblogs.com/menglin2010/p/12114473.html


分享到:


相關文章: