.Net Core配置Consul+Ocelot
时代在变,技术也在更新迭代。从传统的单体应用架构到现在的分布式集群架构,在技术的学习上真的是一点都不能松懈。
网上关于微服务与Consul的话题太多了,我在这里不做过多描述。
其实就是在微服务中我们可以利用Consul可以实现服务的发现、治理、健康检查等...
用它先下载它:
https://www.consul.io/downloads.html
我此番在windows下操作,打开下载的Consul所在文件夹,输入 consul agent -dev -client 0.0.0.0 -ui
Consul的默认启动端口为8500,如果能正常显示页面则启动成功。
然后在API中创建一个文件夹文件夹中存放ConsulRegist类其中写一个IConfiguration的拓展代码:
public static class ConsoleRegist
{
public static void ConsulExtend(this IConfiguration configuration)
{
ConsulClient client = new ConsulClient(m =>
{
m.Address = new Uri("http://10.31.60.8/");//Consul的Ip地址
m.Datacenter = "dc1";
});
//启动的时候在consul中注册实例服务
//在consul中注册的ip,port
string ip = configuration["ip"];
int port = int.Parse(configuration["port"]);
int weight = string.IsNullOrWhiteSpace(configuration["weight"]) ? 1 : int.Parse(configuration["weight"]);
client.Agent.ServiceRegister(new AgentServiceRegistration()
{
ID = "service" + Guid.NewGuid(),//唯一的
Name = "MicroserviceAttempt",//组(服务)名称
Address = ip,
Port = port,//不同的端口=>不同的实例
Tags = new string[] { weight.ToString() },//标签
Check = new AgentServiceCheck()//服务健康检查
{
Interval = TimeSpan.FromSeconds(12),//间隔12s一次 检查
HTTP = $"http://{ip}:{port}/Api/Health/Index",
Timeout = TimeSpan.FromSeconds(5),//检测等待时间
DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(20)//失败后多久移除
}
});
Console.WriteLine($"{ip}:{port}--weight:{weight}");
}
}
在program.cs中注入:builder.Configuration.ConsulExtend();
将api项目启动
dotnet ServicesInstances.dll --urls="http://*:5726" --ip="你的IP地址" --port=5726
启动完毕后我们可以看到:
也可以在Consul中看到:
这样Console就配置好了接下来我们要配置Ocelot网关
1、Consul整合GeteWay.引入NuGet包:Ocelot、Ocelot.Provider.Consul注意版本是否适用!!!!
2、添加一个JSON文件名叫configurationJson其中信息如下:
{ //*************************单地址多实例负载均衡+Consul*****************************
"Routes": [
{
//GeteWay转发=>Downstream
"DownstreamPathTemplate": "/api/{url}", //服务地址--url变量
"DownstreamScheme": "http",
//http://localhost:6299/T5/User/GetCustomerUser
"UpstreamPathTemplate": "/T5/{url}", //网关地址--url变量 冲突的还可以加权重Priority
"UpstreamHttpMethod": [ "Get", "Post" ],
"UseServiceDiscovery": true, //使用服务发现
"ServiceName": "MicroserviceAttempt", //Consul服务名称
"LoadBalancerOptions": {
"Type": "RoundRobin" //轮询 //"LeastConnection":最少连接数服务器 "NoloadBalance":不负载均衡 "CookieStickySession":会话粘滞
}
}
],
"GlobalConfiguration": {
"BaseUrl": "http://127.0.0.1:6299",//
"ServiceDiscoveryProvider": {
"Host": "10.31.60.8",//Consul所在的IP地址
"Port": 8500,
"Type": "Consul" //由Consul提供服务发现,每次请求去Consul
}
//"ServiceDiscoveryProvider": {
// "Host": "localhost",
// "Port": 8500,
// "Type": "PollConsul", //由Consul提供服务发现,每次请求去Consul
// "PollingInterval": 1000//轮询Consul,评率毫秒--down是不知道的
//}
}
//*************************单地址多实例负载均衡+Consul*****************************
}
最后我们请看效果: