.net core配置文件热加载

.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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值