应无所住,而生其心
排名
1
文章
862
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

.net6使用nacos作为配置中心

10792人阅读 2022/11/13 21:05 总访问:5270138 评论:0 收藏:1 手机
分类: 微服务


consul+.net core实现配置中心:
https://www.tnblog.net/aojiancc2/article/details/6815
nacos的安装参考:
https://www.tnblog.net/aojiancc2/article/details/7865
nacos的官方文档:
https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html
.net 的sdk
https://github.com/nacos-group/nacos-sdk-csharp
nacos下.net的驱动地址:
https://github.com/nacos-group/nacos-sdk-csharp

.net6使用nacos作为配置中心基本使用

第一步,添加依赖库

  1. <PackageReference Include="nacos-sdk-csharp" Version="1.3.4" />
  2. <PackageReference Include="nacos-sdk-csharp.AspNetCore" Version="1.3.4" />
  3. <PackageReference Include="nacos-sdk-csharp.Extensions.Configuration" Version="1.3.4" />
  4. <PackageReference Include="nacos-sdk-csharp.IniParser" Version="1.3.4" />
  5. <PackageReference Include="nacos-sdk-csharp.YamlParser" Version="1.3.4" />

第二步,在appsettings.json中配置好使用nacos的信息

  1. {
  2. "NacosConfig": {
  3. "Listeners": [
  4. {
  5. "Optional": false,
  6. "DataId": "tnblog.main.test",
  7. "Group": "DEFAULT_GROUP"
  8. }
  9. ],
  10. //"Namespace": "csharp-demo", // Please set the value of Namespace ID !!!!!!!!
  11. "ServerAddresses": [ "http://xxx.yyy.zzz.yyyy:8848" ],
  12. "UserName": "nacos",
  13. "Password": "nacos"
  14. //"AccessKey": "",
  15. //"SecretKey": ""
  16. //"EndPoint": "acm.aliyun.com",
  17. //"ConfigFilterAssemblies": [ "YouPrefix.AssemblyName" ],
  18. //"ConfigFilterExtInfo": "some ext infomation"
  19. }
  20. }

最主要就是nacos服务的地址,登录nacos的账户与密码等。以及需要配置到nacos上面的配置信息,比如我这里配置的要读取的是Group为DEFAULT_GROUP,DataId为tnblog.main.test的配置。这个我们就需要在nacos中去配置好,相关的配置。

比如我们随便配置一点内容:
就把appsettings.json中默认的日志配置进去,然后加了一点数据库与Kestrel的配置,项目启动端口什么的。

  1. {
  2. "Logging": {
  3. "LogLevel": {
  4. "Default": "Information",
  5. "Microsoft.AspNetCore": "Warning"
  6. }
  7. },
  8. "AllowedHosts": "*",
  9. "Kestrel": {
  10. "Limits": {
  11. "MaxConcurrentConnections": 100,
  12. "MaxConcurrentUpgradedConnections": 100
  13. },
  14. "DisableStringReuse": true,
  15. "EndPoints": {
  16. "Http": {
  17. "Url": "http://*:8805" // 项目启动端口
  18. }
  19. }
  20. },
  21. "DbConfig":{
  22. "DbType": 0,
  23. //数据库连接字符串
  24. "ConnectionString": "Data Source=localhost;port=3306;Initial Catalog=TNBLOG;uid=root;pwd=123456;CharSet=utf8mb4;Allow User Variables=true;",
  25. "IsAutoCloseConnection": true
  26. }
  27. }

在nacos中的配置效果如下:

第三步,在Program.cs中去加载nacos配置

  1. var app = builder.Build();
  2. builder.Host.UseNacosConfig(section: "NacosConfig", parser: null, logAction: null);
  3. // .UseNacosConfig(section: "NacosConfig", parser: Nacos.YamlParser.YamlConfigurationStringParser.Instance logAction: null)
  4. // .UseNacosConfig(section: "NacosConfig", parser: Nacos.IniParser.IniConfigurationStringParser.Instance logAction: null)
  5. //v1.3.3之前版本的用法
  6. //builder.Host.ConfigureAppConfiguration(webBuilder =>
  7. //{
  8. // webBuilder.AddNacosV2Configuration(webBuilder.Build().GetSection("nacos"));
  9. // Console.WriteLine("ConfigureWebHostDefaults");
  10. //});

基本的操作就完成了,现在我们读取配置文件的内容就已经是配置在nacos上面的了

测试读取配置

  1. private readonly IConfiguration _configuration;
  2. private readonly ILogger<WeatherForecastController> _logger;
  3. public WeatherForecastController(ILogger<WeatherForecastController> logger, IConfiguration configuration)
  4. {
  5. _logger = logger;
  6. _configuration = configuration;
  7. }
  8. [HttpGet]
  9. public IEnumerable<string> Get()
  10. {
  11. var dbConfig = _configuration.GetSection("DbConfig");
  12. //读取连接字符串配置
  13. string connectionString = dbConfig["ConnectionString"];
  14. //读取配置
  15. string isAutoCloseConnection = _configuration["DbConfig:IsAutoCloseConnection"];
  16. return new List<string>() { connectionString, isAutoCloseConnection };
  17. }

使用配置的启动端口8805去访问项目进行测试就能看到配置会被成功读取:

项目下载地址

https://download.tnblog.net/resource/index/f0c04703387b4ec5908ba4e022ccbe81

加载多个配置文件,比如加载独立的与公共的

很简单在Listeners中去配置多个就行了,这样就可以加载多个配置文件了。

比如我这里加载了tnblog.main.common以及tnblog.main.test两个配置文件。

加载多个配置文件后,每个配置文件中的内容都可以使用,如果多个配置文件中有重复的配置,后面的会覆盖前面的。

测试读取的代码
在两个配置文件中去写点配置,然后读取测试即可

  1. [HttpGet]
  2. public IEnumerable<string> Get()
  3. {
  4. var dbConfig = _configuration.GetSection("DbConfig");
  5. //读取连接字符串配置
  6. string connectionString = dbConfig["ConnectionString"];
  7. //读取配置
  8. string isAutoCloseConnection = _configuration["DbConfig:IsAutoCloseConnection"];
  9. //读取common里边的配置
  10. string UserName = _configuration["UserName"];
  11. string Password = _configuration["Password"];
  12. return new List<string>() { connectionString, isAutoCloseConnection };
  13. }

怎么动态的加载不同的配置文件,比如动态切换生产环境与本地开发环境

很简单,配合.net 中的环境变量使用即可。
比如我们开发的环境使用的nacos地址是http://192.168.1.1:8848,
线上使用的nacos地址是https://www.tnblog.net/nacos

我们就可以在appsettings.json中配置两个出来
比如

  1. //开发环境使用的nacos
  2. "NacosConfig-Development": {
  3. "Listeners": [
  4. {
  5. "Optional": false,
  6. "DataId": "tnblog.main.test",
  7. "Group": "DEFAULT_GROUP"
  8. }
  9. ],
  10. "ServerAddresses": [ "http://192.168.1.1:8848" ],
  11. "UserName": "nacos",
  12. "Password": "nacos"
  13. },
  14. //正式环境使用的nacos
  15. "NacosConfig-Production": {
  16. "Listeners": [
  17. {
  18. "Optional": false,
  19. "DataId": "tnblog.main.test",
  20. "Group": "DEFAULT_GROUP"
  21. }
  22. ],
  23. "ServerAddresses": [ "https://www.tnblog.net/nacos" ],
  24. "UserName": "nacos",
  25. "Password": "nacos"
  26. }

然后在Program.cs使用nacos配置的时候根据环境变量来即可

  1. //获取环境变量。可以环境变量的不同去读取不同naocs服务的配置
  2. string environmentName = builder.Environment.EnvironmentName;
  3. //nacos注册中心
  4. builder.Host.UseNacosConfig(section: "NacosConfig-"+ environmentName, parser: null, logAction: null);

测试的时候你本地直接运行获取的就是Development的配置,如果是发布出来后运行的获取的就是Production

当然你也可以在同一个nacos服务中根据不同的环境变量去加载不同的配置文件
比如你在nacos中创建配置环境的时候可以命名:tnblog.main.test.Development以及tnblog.main.test.Production然后根据不同的环境变量去加载不同的配置。根据实际情况灵活运用即可。

常用错误解决

….


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

.net6 Ocelot 与 Kubernetes

.Net6 Ocelot 与 Kubernetes[TOC] 前言这玩意太坑人了。浪费了我一天的时间。先看我们想实现的效果流程: 首先我们请求sv...

.net core发布出来swagger无法访问。docker 发布.net6 webapi swagger访问不到

因为代码里边设置swagger的代码是: if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.Use...

.net6 指定时区

.Net6 指定时区[TOC] 最近相当忙!忙着学这学那的,各种考试。以及项目上也有很多改动。还有这恶心的时间问题(特别注意当...

.net6 AsyncEx 异步锁

.Net6 AsyncEx[TOC] 简单来讲就是可以通过异步方式实现锁。安装&lt;PackageReference Include=&quot;Nito.AsyncEx&quot; V...

Kubernetes .net6 集群管理(一)

Kubernetes .Net6 集群管理(一)[TOC] 对于Kubernetes集群的管理,.net提供了KubernetesClient库,可以对k8s集群通过简单...

Kubernetes .net6 Webhook

Kubernetes .Net6 Webhook[TOC] 本文主要是学习陈计节大佬讲的 使用 .NET Core 开发 Kubernetes 基础组件记录的笔记。 Ad...

.net6 设置信任自签证书(浏览器可信任)

.Net6 设置信任自签证书(浏览器可信任)[TOC] 先决条件确保本地windows上拥有openssl,没有的自己去:http://slproweb.com...

Kubernetes .net6 CRD

Kubernetes .Net6 CRD[TOC] CRD介绍简单来说就是自定义资源,像Pod、Service、Deployment一样。创建自定义资源的资源类型...

linux批量执行命令脚本。linux脚本执行docker镜像打包运行.net6项目等

linux批量执行命令脚本1:创建一个.sh后缀的文件vi run.sh 2:在文件开头添加内容#!/bin/bash 3:在文件里边输入想要执行...

docker发布.net6项目。制作发布的批量脚本一键发布脚本

docker 发布.net core项目可以参考:https://www.tnblog.net/aojiancc2/article/details/5030 docker发布.net6项目简单的d...

.net6 连接mysql报错Unable to connect to any of the specified MySQL hosts.

.net5/6 连接mysql报错Unable to connect to any of the specified MySQL hosts. 不能使用点.连接 server=.;uid=root;pwd...

.net6使用session

先在Program.cs中引入 使用存储 HttpContext.Session.SetString(&quot;nickname&quot;,&quot;test&quot;); 读取 string...

.net6使用nacos实现服务注册与服务发现

.net6使用nacos作为配置中心:https://www.tnblog.net/aojiancc2/article/details/7870docker安装nacos v2.1.2:https://www...

.net6.net core获取服务器上所有网卡的IP地址

代码如下: //获取服务器上所有网卡的IP地址 NetworkInterface[] networks = NetworkInterface.GetAllNetworkInterfaces(...

.net6使用nacos 集群部署,负载均衡调用 。docker swarm 集群部署.net6项目

我们这里的k8s测试环境暂时用不了了,这里先使用docker swarm来进行一下集群部署。.net6使用nacos实现服务注册与服务发现:h...