背景

前段时间,cranelee 在Github上给老黄提了个issues, 问到了如何用Nacos的SDK访问阿里云ACM。

https://github.com/catcherwong/nacos-sdk-csharp/issues/13

刚看到这个issues的时候,老黄也是觉得一脸懵逼,好像这两者没有什么必然联系,打开ACM的文档一看,就知道为什么了。

原来Java和Go的已经是可以用nacos的SDK来访问的了。那就说明两者是兼容的。

这段时间抽空看了一下,把这个功能基本实现了。

下面就简单介绍一下。

简单看看ACM

开通ACM之后,可以看到类似这样的界面。其实和Nacos控制台的配置部分差不远。

要使用这个的话,需要几个东西,一个是ACM上面的命名空间,一个是AccessKey ID,一个是AccessKey Secret。

其中的AK/SK可以在命名空间详情里面获取。

然后就是添加配置了。

三张图,看个大概就好了,下面来具体看看在.NET Core中怎么使用。

如何使用

安装最新预览版的SDK

<ItemGroup>
<PackageReference Include="nacos-sdk-csharp-unofficial.Extensions.Configuration" Version="0.2.7-alpha7" />
</ItemGroup>

注:目前还没有发布正式版,不过不影响正常使用了。

修改Program

public class Program
{
public static void Main(string[] args)
{
// 处理编码问题
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); CreateHostBuilder(args).Build().Run();
} public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, builder) =>
{
// 这两行代码就是关键
var c = builder.Build();
builder.AddNacosConfiguration(c.GetSection("NacosConfig"));
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}

调整appsettings.json

{
"NacosConfig": {
"Optional": false,
"DataId": "msconfigapp",
"Group": "",
"Tenant": "<换成您的命名空间>",
"ServerAddresses": [],
"AccessKey": "<换成您的AK>",
"SecretKey": "<换成您的SK>",
"EndPoint": "acm.aliyun.com"
}
}

注: 由于老黄开通个人开通的,没有内网服务器,所以用的是公网的EndPoint,这个需要根据情况自行调整。

实体映射(非必须)

public class AppSettings
{
public string Str { get; set; } public int Num { get; set; } public List<int> Arr { get; set; } public SubObj SubObj { get; set; }
} public class SubObj
{
public string a { get; set; }
}

为了方便和配置一一对应,可以建立实体,做一个映射。

加了这个的,需要在Startup上面配置一下。

public void ConfigureServices(IServiceCollection services)
{
// others ... services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
}

读取配置

这里用控制器做为示例

[ApiController]
[Route("api/[controller]")]
public class ConfigController : ControllerBase
{
private readonly ILogger<ConfigController> _logger;
private readonly IConfiguration _configuration;
private readonly AppSettings _settings;
private readonly AppSettings _sSettings;
private readonly AppSettings _mSettings; public ConfigController(
ILogger<ConfigController> logger,
IConfiguration configuration,
IOptions<AppSettings> options,
IOptionsSnapshot<AppSettings> sOptions,
IOptionsMonitor<AppSettings> _mOptions
)
{
_logger = logger;
_configuration = configuration;
_settings = options.Value;
_sSettings = sOptions.Value;
_mSettings = _mOptions.CurrentValue;
} [HttpGet]
public string Get()
{
string id = Guid.NewGuid().ToString("N"); _logger.LogInformation($"============== begin {id} ====================="); var conn = _configuration.GetConnectionString("Default");
_logger.LogInformation($"{id} conn = {conn}"); var version = _configuration["version"];
_logger.LogInformation($"{id} version = {version}"); var str1 = Newtonsoft.Json.JsonConvert.SerializeObject(_settings);
_logger.LogInformation($"{id} IOptions = {str1}"); var str2 = Newtonsoft.Json.JsonConvert.SerializeObject(_sSettings);
_logger.LogInformation($"{id} IOptionsSnapshot = {str2}"); var str3 = Newtonsoft.Json.JsonConvert.SerializeObject(_mSettings);
_logger.LogInformation($"{id} IOptionsMonitor = {str3}"); _logger.LogInformation($"===============================================");
_logger.LogInformation($"===============================================");
_logger.LogInformation($"==============================================="); return "ok";
}
}

附上一张操作动图

在ACM上修改之后,程序是可以马上读取到的。

下面是本文的示例代码。

https://github.com/catcherwong-archive/2020/tree/master/06/NacosACMDemo

小结

Nacos和ACM的操作基本都是一致的,比较不一样的地方是,从直连Nacos变成要先去地址服务拿到Nacos的地址后再操作。

ASP.NET Core通过Nacos SDK读取阿里云ACM的更多相关文章

  1. 如何在ASP.NET Core自定义中间件中读取Request.Body和Response.Body的内容?

    原文:如何在ASP.NET Core自定义中间件中读取Request.Body和Response.Body的内容? 文章名称: 如何在ASP.NET Core自定义中间件读取Request.Body和 ...

  2. ASP.NET Core 2.0 中读取 Request.Body 的正确姿势

    原文:ASP.NET Core 中读取 Request.Body 的正确姿势 ASP.NET Core 中的 Request.Body 虽然是一个 Stream ,但它是一个与众不同的 Stream ...

  3. ASP.NET Core 5.0 中读取Request中Body信息

    ASP.NET Core 5.0 中读取Request中Body信息 记录一下如何读取Request中Body信息 public class ValuesController : Controller ...

  4. 【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发

    <ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-tr ...

  5. Hyperf 接入阿里云ACM应用配置管理中心

    参考: 阿里云文档:https://help.aliyun.com/document_detail/85466.html?spm=a2c4g.11186623.6.550.43cb42d4Af4Tu0 ...

  6. ASP.NET Core轻松入门Bind读取配置文件到C#实例

    首先新建一个ASP.NET Core空项目,命名为BindReader 然后 向项目中添加一个名为appsettings.json的json文件,为什么叫appsettings呢?  打开Progra ...

  7. .Net Core ABP应用如何在阿里云Linux Docker中开启Https

    .Net Core应用开启Https本身就有很多种方式:1.代码配置2.环境变量3.反向代理 这里主要记录下阿里云的ECS,加阿里云免费的SSL证书,通过程序代码,如何进行配置. 首先从阿里云下载证书 ...

  8. ASP.NET Core结合Nacos来完成配置管理和服务发现

    目录 前言 Nacos的简介 启动Nacos 配置管理 服务发现 写在最后 前言 今年4月份的时候,和平台组的同事一起调研了一下Nacos,也就在那个时候写了.net core版本的非官方版的SDK. ...

  9. ASP.NET Core实现强类型Configuration读取配置数据

    前言 实现读取JSON文件几种方式,在项目中采取老办法简单粗暴,结果老大过来一看,恩,这样不太可取,行吧那我就用.NET Core中最新的方式诺,切记,适合的才是最好的,切勿懒. .NET Core读 ...

随机推荐

  1. 科技感满满,华为云DevCloud推出网页暗黑模式

    近期,华为云DevCloud推出了暗黑模式,让用户在网页端也可以体验到桌面级应用才有的特性.   深色模式(Dark Mode),俗称暗黑模式.是近2年以来用户呼声最高的功能之一,一些国外顶级厂商都将 ...

  2. 你不知道的事---SringCloud的feign的继承特性

    前言 说起SpringChoud的feign大家用过的都说好.Feign是Netflix开发的声明式.模板化的HTTP客户端.对于我们微服务来说,微服务之间的api调用,使用feign来说是再方便不过 ...

  3. 【雕爷学编程】Arduino动手做(52)---MicroSD卡读写模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种 的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准 ...

  4. JetBrains PyCharm 2018.2.4 x64 工具里如何安装bs4

    第一步:点击File->Settings 第二步:选择Project:workplace-->Project Interpreter,然后再点击右上角的"+"按钮进入下 ...

  5. LAMP搭建wordpress

    centos7安装Apache centos7安装mysql8 centos7安装php7 先登录mysql创建一个wordpress的数据库 create database wordpress 下载 ...

  6. 王艳 201771010127《面向对象程序设计(java)》第十八周学习总结

    实验十八  总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设 ...

  7. poj2762 判断一个图中任意两点是否存在可达路径 也可看成DAG的最小覆盖点是否为1

      Going from u to v or from v to u? Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 179 ...

  8. SQL Server存储过程模拟HTTP请求POST和GET协议

    /****** Object: StoredProcedure [dbo].[sp_http_get] Script Date: 05/23/2020 15:47:09 ******/ SET ANS ...

  9. Hibernate实现limit查询报错 :unexpected token: limit near line 1, column 33 [from pojo.Product p order by id limit ?,? ]

    原因: hibernate无法识别limit,  hql语句更不能这样写String hql="from Product p order by id limit ?,? "; 解决 ...

  10. RAC配置2个私网网卡使用HAIP服务

    如果是在oracle 10gRAC, 私网网卡冗余保护只能使用操作系统网卡绑定方式,但是到了oracle 11g,如果担心一个私网网卡故障导致rac节点驱逐,可以使用2个私网网卡,Oracle将自动使 ...