.NET5微服务示例-Consul配置中心

接着这篇:https://www.cnblogs.com/shousiji/p/15271767.html

本文以SGZ.DepartmentService为例

1、打开Consul => Key/Value => Create,以项目名称命名,名称后面加斜杠就是创建文件夹了

2、创建appsettings.Development.json、appsettings.Production.json(就是把项目中的配置文件信息粘贴过来)

3、回到项目,右键appsettings.json,选择“从项目中排除”

4、新建sitesettings.json,配置如下

{
  "SiteConfigs": {
    "ServiceScheme": "http",
    "ServiceAddress": "192.168.2.119",
    "ServicePort": 551
  },
  "ConsulConfigs": {
    "DataCenter": "dc1",
    "RegistryAddress": "http://127.0.0.1:8500",
    "HealthCheckAddress": "/HealthCheck",
    "ServiceName": "DepartmentService"
  }
}

5、安装Nuget包“Winton.Extensions.Configuration.Consul”

6、Program类的CreateHostBuilder函数改造(应该使用launchSettings.json来配置站点地址,不然用SiteConfigs就多写代码了,留个心眼后面再改造)

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();

            var configuration = new ConfigurationBuilder().AddJsonFile("sitesettings.json", false, true).Build();
            string serviceScheme = configuration["SiteConfigs:ServiceScheme"];
            string serviceAddress = configuration["SiteConfigs:ServiceAddress"];
            string servicePort = configuration["SiteConfigs:ServicePort"];
            if (!string.IsNullOrEmpty(serviceScheme)
                && !string.IsNullOrEmpty(serviceAddress)
                && !string.IsNullOrEmpty(servicePort))
            {
                webBuilder.UseUrls($"{serviceScheme}://{serviceAddress}:{servicePort}");
            }
            webBuilder.ConfigureAppConfiguration(configure =>
            {
                configure.AddConfiguration(configuration);
            });

            #region 从配置中心中获取配置信息,去掉就变为从本地获取
            string consulAddress = configuration["ConsulConfigs:RegistryAddress"];
            string consulDataCenter = configuration["ConsulConfigs:DataCenter"];
            webBuilder.ConfigureAppConfiguration((context, configure) =>
            {
                IWebHostEnvironment webHostEnvironment = context.HostingEnvironment;
                string ApplicationName = webHostEnvironment.ApplicationName;// 应用名称
                string EnvironmentName = webHostEnvironment.EnvironmentName;// 这个是环境名
                configure.AddConsul($"{ApplicationName}/appsettings.{EnvironmentName}.json", options =>
                {
                    options.ConsulConfigurationOptions = c =>
                    {
                        c.Datacenter = consulDataCenter;
                        c.Address = new Uri(consulAddress);
                    };
                    //热加载配置文件
                    options.ReloadOnChange = true;
                });
            }); 
            #endregion
        });

7、增加一个action

运行与验证

1、启动项目,访问http://192.168.2.119:551/api/Department/GetString,得到结果

2、项目右键属性->调试,修改环境变量为Production(也可以在launchSettings.json中修改)

3、再启动并访问http://192.168.2.119:551/api/Department/GetString,得到结果

说明确实是从Consul中获取配置,并且可以切换环境

本文代码:https://files.cnblogs.com/files/shousiji/net5_configcenter.rar

原文地址:https://www.cnblogs.com/shousiji/p/15292936.html