.net core配置文件热加载
原生方式
config.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true);
reloadOnChange为true,则代表配置文件更新时重新加载配置文件
代码实践
1)、首先创建一个空白的解决方案
2)、添加一个网关项目
这里我选择本人熟悉的.net core 3.1版本
3)、引入ocelot包,这里本人选择的事适合.net core 3.1版本的ocelot 15.0
安装好之后,在Program中添加加载ocelot配置文件代码
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.AddJsonFile("ocelot.json", false, true);
})
4)、在项目根目录下创建ocelot.json文件
配置文件内容可稍后添加,我们先注入ocelot服务
这样网关服务就搭建好了,我们接下来创建一个下游服务项目
5)、创建下游服务
6)、直接启动该服务项目
7)、现在可以在ocelot.json配置中加配置项了
{
"ReRoutes": [
{
"DownstreamPathTemplate": "/weatherforecast",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 43275
}
],
"UpstreamPathTemplate": "/aa",
"UpstreamHttpMethod": [ "Get" ]
}
],
"GlobalConfiguration": {
}
}
8)、接下来启动网关,启动网关后再地址栏上输入/aa即可访问下游服务
接下来我们修改配置文件,不重启网关项目看看是否会生效
我们将上游地址改成/bb,则/aa请求不到下游服务了
nacos配置中心
原生方式有一个致命的缺陷就是如果网站部署为多网关服务实例,那么修改配置文件时就需要手动的更改多台服务器,所以引入nacos配置中心,将ocelot配置文件写入配置中心,多个网关服务实例监听ocelot配置文件的更改,就能够修改任意一台服务后自动更新其他服务配置文件
代码实践
1)、nacos环境搭建
本人使用的事nacos2.1版本,具体搭建请参考官网:https://nacos.io/zh-cn/
2)、在网关服务中引入一下依赖包
dotnet add package nacos-sdk-csharp
dotnet add package nacos-sdk-csharp.AspNetCore
dotnet add package nacos-sdk-csharp.Extensions.Configuration
我们使用最新版1.3.3版
3)、配置
1、在Program中添加一下配置
var c = config.Build();
// 从配置文件读取Nacos相关配置
// 默认会使用JSON解析器来解析存在Nacos Server的配置
config.AddNacosV2Configuration(c.GetSection("NacosConfig"));
2、在appsettings.json添加如下配置项
"NacosConfig": {
"Listeners": [
{
"Optional": false,
"DataId": "ocelot.json",
"Group": "DEFAULT_GROUP"
}
],
"Namespace": "",
"ServerAddresses": [ "http://192.168.17.1:8848/" ]
}
Listeners配置节中必须包含一个监听的配置项,在nacos-csharp-sdk1.3.3版本中如果不添加该配置项则运行时会抛出异常,如下所示:
3)、以上信息配置好之后我们就可以启动网关了
由于我们只添加了监听配置项,没有在nacos中添加配置文件,所以无论是访问/aa还是/bb都不能访问下游服务
4)、在nacos中添加配置文件
最后点击发布再次刷新页面即可
这样我们的ocelot多服务实例的配置就支持热加载了
注意:nacos-csharp-sdk 1.2与1.3.3版本有点不同,1.2中可以不添加Listener配置项,运行起来不会出错
如果觉得在nacos配置中心中更改配置文件不方便,nacos-csharp-sdk也提供nacos配置文件读写的接口
注入以上接口和实现类就行了
在此就不过多演示了,更多内容请参考以下两个官方文档
参考文档
Ocelot官方文档:
https://ocelot.readthedocs.io/en/latest/features/configuration.html
nacos.net官方文档:
https://nacos-sdk-csharp.readthedocs.io/en/latest/introduction/gettingstarted.html