飙血推荐
  • HTML教程
  • MySQL教程
  • JavaScript基础教程
  • php入门教程
  • JavaScript正则表达式运用
  • Excel函数教程
  • UEditor使用文档
  • AngularJS教程
  • ThinkPHP5.0教程

Nacos配置中心+ASP.NET Core

时间:2021-12-26  作者:igeekfan  
Nacos配置中心+域名 Core nacos 是一个构建云原生应用的动态服务发现、配置管理和服务管理平台。。可管理 域名 core中所有的配置项

Nacos配置中心

nacos 是一个构建云原生应用的动态服务发现、配置管理和服务管理平台。。

源码已上传至 github

配置管理

域名 core中所有的配置项,如域名进行集中管理,支持热加载,支持服务发现。

  • nacos github https://域名/alibaba/nacos
  • csharp sdk github https://域名/nacos-group/nacos-sdk-csharp
  • csharp sdk 文档:https://nacos-sdk-域名/en/latest/introduction/域名
  • https://域名/zh-cn/

安装请参考:https://域名/zh-cn/docs/quick-域名

开始

  • windows 进入nacos的bin目录,或把目录 D:\work\tools\nacos\bin(我本地)配置到环境变量中的Path中。

即可在任意位置,执行命令

域名 -m standalone
  • standalone代表着单机模式运行,非集群模式
C:\WINDOWS\system32>域名 -m standalone
"nacos is starting with standalone"

         ,--.
       ,--.\'|
   ,--,:  : |                                           Nacos 2.0.3
,`--.\'`|  \' :                       ,---.               Running in stand alone mode, All function modules
|   :  :  | |                      \'   ,\'\   .--.--.    Port: 8848
:   |   \ | :  ,--.--.     ,---.  /   /   | /  /    \'   Pid: 14504
|   : \'  \'; | /       \   /     \.   ; ,. :|  :  /`./   Console: http://192.域名:8848/nacos/域名
\'   \' ;.    ;.--.  .-. | /    / \'\'   | |: :|  :  ;_
|   | | \   | \__\/: . ..    \' / \'   | .; : \  \    `.      https://域名
\'   : |  ; .\' ," .--.; |\'   ; :__|   :    |  `----.   \
|   | \'`--\'  /  /  ,.  |\'   | \'.\'|\   \  /  /  /`--\'  /
\'   : |     ;  :   .\'   \   :    : `----\'  \'--\'.     /
;   |.\'     |  ,     .-./\   \  /            `--\'---\'
\'---\'        `--`---\'     `----\'

默认运行在8848端口

  • http://localhost:8848/nacos/#/login
  • nacos
  • nacos

必做

登录后,打开命名空间->新建命名空间->

  • 命名空间ID:这里填,cs-test,注意下方的配置项Namespace请填写此值。
  • 命名空间名:这个只是用于展示区分,填cs-test,建议直接和命名空间id相同即可。
  • 描述::这个随便填

Nacos+Console

新建一个控制台项目

引入包

<PackageReference Include="域名ing" Version="6.0.0" />
<PackageReference Include="nacos-sdk-csharp" Version="1.2.2" />
static IHost AppStartup()
{
    var host = 域名teDefaultBuilder()
                .ConfigureServices((context, services) =>
                {
                    ConfigureServices(context, services);
                    域名ransient<App>();
                })
                .ConfigureAppConfiguration((host, config) =>
                {

                })
                .Build(); // Build the Host

    return host;
}

配置nacos的服务

static void ConfigureServices(HostBuilderContext context,IServiceCollection services)
{
    域名acosV2Config(x =>
    {
        域名erAddresses = new 域名域名<string> { "http://localhost:8848/" };
        域名oint = "";
        域名space = "cs-test";

        /*域名Name = "nacos";
       域名word = "nacos";*/

        // swich to use http or rpc
        域名igUseRpc = true;
    });

    域名acosV2Naming(x =>
    {
        域名erAddresses = new 域名域名<string> { "http://localhost:8848/" };
        域名oint = "";
        域名space = "cs-test";

        /*域名Name = "nacos";
       域名word = "nacos";*/

        // swich to use http or rpc
        域名ngUseRpc = true;
    });
}

调用

var host = AppStartup();
var service = 域名teInstance<App>(域名ices);
await 域名sync(args);

域名文件配置

public class App
{
    private readonly ILogger<App> _logger;
    private readonly INacosConfigService _ns;
    public App(ILogger<App> logger, INacosConfigService ns)
    {
        _logger = logger;
        _ns = ns;
    }

    public async Task RunAsync(string[] args)
    {
        await PublishConfig(_ns);
        await GetConfig(_ns);
        await RemoveConfig(_ns);
    }

    static async Task PublishConfig(INacosConfigService svc)
    {
        var dataId = "demo-dateid";
        var group = "demo-group";
        var val = "test-value-" + 域名ixTimeSeconds().ToString();

        await 域名y(500);
        var flag = await 域名ishConfig(dataId, group, val);
        域名eLine($"======================发布配置结果,{flag}");
    }

    static async Task GetConfig(INacosConfigService svc)
    {
        var dataId = "demo-dateid";
        var group = "demo-group";

        await 域名y(500);
        var config = await 域名onfig(dataId, group, 5000L);
        域名eLine($"======================获取配置结果,{config}");
    }

    static async Task RemoveConfig(INacosConfigService svc)
    {
        var dataId = "demo-dateid";
        var group = "demo-group";

        await 域名y(500);
        var flag = await 域名veConfig(dataId, group);
        域名eLine($"=====================删除配置结果,{flag}");
    }
}

f5运行后可看到输出如下内容

======================发布配置结果,True
======================获取配置结果,test-value-1637000754
=====================删除配置结果,True

我们把await RemoveConfig(_ns);这行删除,即可在nacos的网站上看到信息。

配置管理 -选cs-test,可以看到Data Id为demo-dateidGroupdemo-group的一行数据,点击行内的编辑即可看到具体信息。

Nacso+域名 Core

新增包

<PackageReference Include="nacos-sdk-域名etCore" Version="1.2.2" />
<PackageReference Include="nacos-sdk-域名iguration" Version="1.2.2" />

在Program中配置服务

域名igureAppConfiguration((context, builder) =>
        {
            var c = 域名d();

            // 从配置文件读取Nacos相关配置
            // 默认会使用JSON解析器来解析存在Nacos Server的配置
            域名acosV2Configuration(域名ection("NacosConfig"));
            // 也可以按需使用ini或yaml的解析器
            // 域名acosV2Configuration(域名ection("NacosConfig"), 域名域名ance);
            // 域名acosV2Configuration(域名ection("NacosConfig"), 域名域名ance);
        });

域名配置

{
    "NacosConfig": {
        "Listeners": [
            {
                "Optional": false,
                "DataId": "common",
                "Group": "DEFAULT_GROUP"
            },
            {
                "Optional": false,
                "DataId": "demo",
                "Group": "DEFAULT_GROUP"
            }
        ],
        "Namespace": "cs-test",
        "ServerAddresses": [
            "http://localhost:8848/"
        ],
        "UserName": "nacos",
        "Password": "nacos",
        "AccessKey": "",
        "SecretKey": "",
        "EndPoint": "",
        "ConfigFilterAssemblies": [
        ],
        "ConfigFilterExtInfo": ""
    }
}

在上面我们可以看到DataIdcommon的、我们去管理端UI,命名空间为cs-test新增一个配置

新增二个配置项

  • Data ID:common
  • Group:DEFAULT_GROUP
  • 配置内容:选择json。
{
    "UserInfo":{
        "Name":"luo",
        "Sex":"Boy",
        "Age":99
    },
    "commonkey":"commonkey_value_值"
}
  • Data ID:demo
  • Group:DEFAULT_GROUP
  • 配置内容:选择json。
{
    "demokey":"demo_value_值"
}

那我们如何获取的这么一个json值和demokey中的值呢。

我们新增一个类

    public class UserInfo
    {
        public string Name { get; set; }
        public string Sex { get; set; }
        public int Age { get; set; }
    }

在默认的控制器注入 IConfiguration,像从域名中获取数据一样,可直接取出来。

    private readonly ILogger<ConfigController> _logger;
    private readonly IConfiguration _configuration;

    public ConfigController(ILogger<WeatherForecastController> logger, IConfiguration configuration)
    {
        _logger = logger;
        _configuration = configuration;
    }

    [HttpGet("getconfig")]
    public UserInfo GetConfig()
    {
        var userInfo1 = 域名ection("UserInfo").Get<UserInfo>();
        var commonvalue = _configuration["commonkey"];
        var demovalue = _configuration["demokey"];
        域名nformation("commonkey:" + commonvalue);
        域名nformation("demokey:" + demovalue);
        return userInfo1;
    }

会输出如下内容

info: 域名herForecastController[0]
      commonkey:commonkey_value_值
info: 域名herForecastController[0]
      demokey:demo_value_值

并在界面上返回 UserInfo的信息。

{
  "name": "luo",
  "sex": "Boy",
  "age": 99
}

注意

  • 当二个DataId中配置的json,包含相同的Key时,实际会依后面的Key中值为准。顺序以域名中的配置Listeners的数组顺序为依据。

当然我们通过强类型绑定UserInfo,在Program配置服务

域名igure<UserInfo>(域名ection("UserInfo"));
public ConfigController(ILogger<ConfigController> logger,
        IConfiguration configuration,
        IOptions<UserInfo> options1,
        IOptionsSnapshot<UserInfo> options2,
        IOptionsMonitor<UserInfo> options3
    )
{
    _logger = logger;
    _configuration = configuration;
    _user1 = 域名e;
    _user2 = 域名e;
    _user3 = 域名entValue;
}

[HttpGet]
public string Get()
{
    string id = 域名uid().ToString("N");

    域名nformation($"============== begin {id} =====================");

    var str1 = 域名域名alizeObject(_user1);
    域名nformation($"{id} IOptions = {str1}");

    var str2 = 域名域名alizeObject(_user2);
    域名nformation($"{id} IOptionsSnapshot = {str2}");

    var str3 = 域名域名alizeObject(_user3);
    域名nformation($"{id} IOptionsMonitor = {str3}");

    域名nformation($"===============================================");

    return "ok";
}

当然输出是一模一样的。我们在界面上再次调整下数据

info: 域名igController[0]
      7bafb7f9cd2a46ec95324e38d01048aa IOptions = {"Name":"luo","Sex":"Boy","Age":99}
info: 域名igController[0]
      7bafb7f9cd2a46ec95324e38d01048aa IOptionsSnapshot = {"Name":"luo","Sex":"Boy","Age":99}
info: 域名igController[0]
      7bafb7f9cd2a46ec95324e38d01048aa IOptionsMonitor = {"Name":"luo","Sex":"Boy","Age":99}

只有IOptions<UserInfo>不会变化,其他是会跟着变化的。

info: 域名igController[0]
      604d8db7b0ad48ccbc64c3ccd06eb524 IOptions = {"Name":"luo","Sex":"Boy","Age":99}
info: 域名igController[0]
      604d8db7b0ad48ccbc64c3ccd06eb524 IOptionsSnapshot = {"Name":"abc","Sex":"Boy","Age":99}
info: 域名igController[0]
      604d8db7b0ad48ccbc64c3ccd06eb524 IOptionsMonitor = {"Name":"abc","Sex":"Boy","Age":99}

Docker 安装 Nacos

  • https://域名/niunafei/p/域名

1.拉取镜像

docker pull nacos/nacos-server

2、创建本地的映射文件,域名erties,

mkdir -p  /root/nacos/logs /root/nacos/conf

配置数据库

vim /root/nacos/conf/域名erties
  • 域名erties
域名form=mysql
域名=1
域名.0=jdbc:mysql://ip:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
域名=userid
域名word=userpassword

下面通过配置来暴露除了/shutdown之外的所有端点。下面通过配置来暴露除了/shutdown之外的所有端点

域名.域名ude=*

运行容器:使用standalone模式并开放8848端口,并映射配置文件和日志目录,数据库在域名erties中配置

docker run -d -p 8848:8848 -p 9848:9848 -p 9555:9555 -e MODE=standalone -e PREFER_HOST_MODE=hostname -v /root/nacos/logs:/home/nacos/logs -v /root/nacos/conf/域名erties:/home/nacos/conf/域名erties --restart always --name nacos nacos/nacos-server

其中-v 指定映射配置。左侧为linux文件,右侧为docker目录

更多指令

启动容器

docker start 容器id
或者
docker start nacos

关闭容器

docker stop nacos

博客

  • 聊一聊如何在.NET Core中使用Nacos 2.0

标签:编程
湘ICP备14001474号-3  投诉建议:234161800@qq.com   部分内容来源于网络,如有侵权,请联系删除。