安裝consul
安裝consul,winodws下使用命令啓動consul
consul.exe agent -dev
如果需要別的機器訪問,需要設置IP
consul.exe agent -dev -client 0.0.0.0
管理頁面的端口是8500
在serveces可以看到已經設置註冊進來的服務SA
創建微服務項目
創建.net6的webapi項目
nuget引用類庫 consul
編寫註冊consul的幫助類
` public static IApplicationBuilder UseConsul(this IApplicationBuilder app, IConfiguration configuration)
{
var lifetime = app.ApplicationServices.GetRequiredService
//創建Consul客戶端實例
ConsulClient consulClient = new ConsulClient(cfg =>
{
//Consul監聽地址
cfg.Address = new Uri("http://localhost:8500");
//數據中心名稱
cfg.Datacenter = "MTS";
});
//命令行獲取IP地址
var ip = configuration["ip"];
Console.WriteLine($"****ip:{ip}");
var port = configuration["port"];
Console.WriteLine(port);
//權重
var weight = string.IsNullOrEmpty(configuration["weight"]) ? 1 : int.Parse(configuration["weight"]);
var registration = new AgentServiceRegistration
{
//服務唯一標識
ID = "Test999_" + DateTime.Now.ToString("yyyyMMddHHmmssfff"),
//服務分組
Name = "SA",
//服務對應的ip地址
Address = ip,
//服務對應的端口
Port = int.Parse(port),
//心跳檢查
Check = new AgentServiceCheck
{
//心跳檢查路徑
HTTP = $"http://{ip}:{port}/api/health/check",
//檢查間隔
Interval = TimeSpan.FromSeconds(12),
//超時時間
Timeout = TimeSpan.FromSeconds(5),
//失敗多久取消註冊
DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(60)
},
Tags = new string[] { weight.ToString() }
};
//註冊服務
consulClient.Agent.ServiceRegister(registration).Wait();
lifetime.ApplicationStopping.Register(
() =>
{
consulClient.Agent.ServiceDeregister(registration.ID).Wait();
}
);
return app;
}`
編寫心跳檢測的控制器
[HttpGet] [Route("Check")] public IActionResult Check() { return Ok(); }
因爲.net6沒有setup了,所以在program中添加調用consul的項目
IConfiguration configuration = builder.Configuration; app.UseConsul(configuration);
啓動項目,此時,項目會注入到sonsul中,這個時候如果客戶端要訪問這些api,需要使用consul去註冊發現,所以即使只有一個服務,沒有網關也是很不方便的
創建網關ocelot項目
創建.net6的webapi項目,nuget添加ocelot和Ocelot.Provider.Consul
創建ocelot.json的文件
{ "Routes": [ { "UpstreamPathTemplate": "/SA/{everything}", "UpstreamHttpMethod": [ "Get", "Post" ], "DownstreamPathTemplate": "/SA/{everything}", "DownstreamScheme": "http", "ServiceName": "SA" } ], "GlobalConfiguration": { "BaseUrl": "https://localhost:5280", "ServiceDiscoveryProvider": { "Scheme": "http", "Host": "localhost", "Port": 8500, "Type": "Consul" } } }
此時啓動網關項目,即可以看到之前註冊的服務出現在swagger中了,測試調用
program添加
`builder.Services.AddOcelot(new ConfigurationBuilder()
.AddJsonFile("ocelot.json")
.Build()).AddConsul();
var app = builder.Build();
app.UseOcelot();`