通常,多个相同的微服务器,它们的appsettings.json配置文件的内容都是一样的,如果,每次修改配置文件,都要逐个替换,那就太繁琐了,我们可以利用网关的文件共享功能,实现配置文件的统一更新。
网关打开文件共享
首先,在网关程序的当前目录下,新建一个文件夹shares
然后编辑网关的appsettings.json,增加一项ShareFolder,指定./shares问共享文件目录
重启网关程序
在shares文件夹里面,新建一个Helloworld.json文件
内容如下:
{ "port" : 7902 }
微服务实时同步更新appsettings.json
MyHelloworldService项目引用 Microsoft.Extensions.Configuration.Json nuget包
打开Program.cs文件,代码改为这样:
using JMS; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using System; namespace MyHelloworldService { class Program { static void Main(string[] args) { var gateways = new NetAddress[] { new NetAddress("192.168.40.131" , 7900) }; ServiceCollection services = new ServiceCollection(); services.AddLogging(loggingBuilder => { loggingBuilder.SetMinimumLevel(LogLevel.Debug); loggingBuilder.AddConsole(); }); var msp = new MicroServiceHost(services); //先从网关下载最新的配置文件到本地 msp.GetGatewayShareFile(gateways[0], "Helloworld.json", "./appsettings.json"); //映射Helloworld.json到./appsettings.json,这样Helloworld.json只要有更新,就下载覆盖本地appsettings.json msp.MapShareFileToLocal(gateways[0], "Helloworld.json", "./appsettings.json"); //加载本地配置文件 var builder = new ConfigurationBuilder(); builder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: false); var configuration = builder.Build(); var port = configuration.GetValue<int>("port"); msp.Register<HelloworldController>("Hello world"); msp.RegisterScheduleTask<AutoRun>(); msp.Build(port, gateways) .Run(); } } }
msp.MapShareFileToLocal 方法实现了实时同步更新的功能。