一、 先做Consul包下载,运行,和 应用 注册到 Consul 部分
关于实现Consul 服务发现部分,因为内容有点多,在我上一篇文章:
https://blog.csdn.net/qq_16005627/article/details/128223592
二、网关Ocelot 集成Consul
新建一个项目webgateway
安装nuget:Ocelot.Provider.Consul
新增配置文件:ocelot.json
ocelot.json写入内容:
{
"Routes": [
{
"UseServiceDiscovery": true, // 使用服务发现
"DownstreamPathTemplate": "/{url}",
"DownstreamScheme": "http",
"ServiceName": "iot.webadmin", // 服务名称-这个要跟应用注册时写的名字一致,否则无效
//配置负载均衡
"LoadBalancerOptions": {
"Type": "RoundRobin" //负载均衡方式
},
"UpstreamPathTemplate": "/{url}",
"UpstreamHttpMethod": [ "Get", "Post" ],
"ReRoutesCaseSensitive": false // 路由大小写敏感设置
}
],
"GlobalConfiguration": { // 网关全局配置
"BaseUrl": "http://localhost:8000",//当前项目webgateway网关的地址
"ServiceDiscoveryProvider": { // 服务发现的配置
"Scheme": "http",
"Host": "localhost",//Consul 服务的访问ip
"Port": 8500,//Consul 服务的访问端口
"Type": "Consul",
"ConfigurationKey": "node-1"
}
}
}
地址统一用localhost,不然是不是会出问题
Program.cs 增加两项配置
builder.Services.AddOcelot(new ConfigurationBuilder().AddJsonFile("ocelot.json", true, true).Build()).AddConsul().AddConfigStoredInConsul();
app.UseOcelot();
如图:
以前配置文件完成,把下面三个东西,都运行起来
网关地址是:http://localhost:8000/
应用地址是:http://localhost:8070/
consul地址是:http://localhost:8500/
访问网关:http://localhost:8000/login/index
(会通过ocelot.json配置中的"ServiceName": "iot.webadmin" 找到consul中注册上来的应用服务 "iot.webadmin"并找到对应的访问地址 http://localhost:8070/login/index ,并转发到 应用服务)
原应用访问:
通过 网关访问:
测试:返回结果与直接访问应用一致,就表示成功了
到这里就成功了!!
当然测试完成之后就使用网关的8000地址访问了, 原应用的8070端口对外不用应用这个地址了