配置中心 App Configuration (一):轻松集成到Asp.Net Core

888896276e866ada145c60c431a68066.png

写在前面

在日常开发中,我这边比较熟悉的配置中心有,携程Apollo,阿里Nacos(配置中心,服务治理一体)

之前文章:

Asp.Net Core与携程阿波罗(Apollo)的第一次亲密接触

总体来说,Apollo和Nacos社区都比较活跃,可能是后发优势或者我们技术选型的原因,我们生产选用的是Nacos,我个人也是优先推荐Nacos(熟悉点,集成方便)。不管怎么说两者都是比较不错的配置中心;

今天我带来了另一个配置中心:微软Azure App Configuration,希望给大家带来一点技术选型上的帮助;

本文先讲讲微软Azure配置中心 App Configuration 在Asp.Net Core中的集成;

本文假设你有一点点微软云Azure的了解,能创建和使用基本的服务,能大概知道什么是云平台;

没有Azure的话找个双币信用卡去开一个免费的(免费12个月);

先在Azure云管理界面创建一个AppConfiguration

[Azure 管理后台]搜索找到App Configuration(我这里是世纪互联的)

https://portal.azure.cn/#home)

9218b5b7eb9ffa066ccd2a91895a7b15.png
1658678405153

点这个create

2d588724f7856374f075bc4c0f646d52.png
1658678449949

添加资源分组服务名称

568c636bbac0d36d44a87212a181d5d8.png
1658678571794
  1. 资源分组就是当前创建这个服务的所在的分组(没有点击Create new)

  2. 服务名称就是当前创建服务名称

创建后稍等一会就可以用了;

新增一些测试配置

15e55c41fdfd99fd6e2419a63f50b943.png
1658678882520

OK,目前服务创建成功,且写入了一些测试配置,后面看看怎么在Asp.net Core里面用了;

在Asp.Net Core中集成

基本使用

1、先随便创建一个WebApi服务(我这里用net6)

勾选启用swagger

2、安装nuget

install-package Microsoft.Azure.AppConfiguration.AspNetCore

3、appsetting.json加入连接字符串

"ConnectionStrings": {"AppConfig": "<your app connection string >"},

4、修改Program.cs

var connectionString = builder.Configuration.GetConnectionString("AppConfig");builder.Host.ConfigureAppConfiguration((hostingContext, config) =>
{简单使用只配置connection stringconfig.AddAzureAppConfiguration(connectionString);
});

5、使用

创建AzureConfigController

AzureConfigController
[Route("api/azure/config/[action]")]public class AzureConfigController : PassportApiController{private readonly ILogger _logger;private readonly IConfiguration _configuration;private readonly Settings _settings;public AzureConfigController(IConfiguration configuration, IAzureStorageApi azureStorageApi, IOptionsSnapshot<Settings> settings){_configuration = configuration;_settings = settings.Value;}/// <summary>/// 读取配置string/// </summary>/// <param name="key">The key.</param>/// <returns></returns>[HttpGet]public IActionResult Get(string key){var result = _configuration[key];return Success("get config success", result);}/// <summary>/// 读取配置对象/// </summary>/// <param name="key">The key.</param>/// <returns></returns>[HttpGet]public async Task<IActionResult> GetObject(string key){var result = _configuration.GetSection(key).Get<AzureStorageConfig>();return Success("get config success", result);}}

读取string配置

776bae62b952c18d6f765d02722daf94.png
1658682672067

读取配置的整个对象

对象key这样配置:

AzureStorageConfig1:ConnectionString

AzureStorageConfig1:ContainerName

...

0350385f39a10bcc2efba8d6a2b6ac61.png
1658682780333

ok,就这么简单~

根据环境变量读取配置

我们一般Asp.Net Core Web应用程序是用环境变量去加载不同配置的,一般我们的配置这样:

appsettings.json
appsettings.<HostEnvironment>.json

同一个key的配置在不同Development和Production环境是可以不一样的。

在Azure App Configuration ,引入一个Label的概念来实现;

修改集成代码:

builder.Host.ConfigureAppConfiguration((hostingContext, config) =>
{简单使用只配置connection string//config.AddAzureAppConfiguration(connectionString);//配置不同功能config.AddAzureAppConfiguration(options =>{//启用Label(多环境)支持options.Connect(connectionString).Select(KeyFilter.Any, LabelFilter.Null)//配置过滤器,读取空Lable的配置.Select(KeyFilter.Any, hostingContext.HostingEnvironment.EnvironmentName); //配置过滤器,只读取某个环境的配置});
});

管理后台给一个Key设置环境变量:

ec909e4213c0ecd4c04291eedf960235.png
1658765273187

这样TestKey1只有在对应环境变量才有值,TestKey2在所有环境变量都有值(空Label);

测试

这里简单测下Development环境的

d422a06d12dac4cdb213eb6ce93c137a.png
1658765390285

总结

目前只是一个非常简单的集成,可以看到集成是非常简单的。后面我们再讲下怎么主动更新配置,怎样启用功能开关等其他高级特性;

另外,我们这里测试都是手填配置到Azure管理后台,其实它也是支持配置的导入导出的,无需担心;

源码

https://github.com/gebiWangshushu/Hei.Azure.Test

[参考]

https://docs.microsoft.com/en-us/azure/azure-app-configuration/overview

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283746.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析] good

目录 前言现象源码分析 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口介绍HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口的具体应用常用HandlerMethodArgumentResolver介绍常用HandlerMethodReturnValueHandler介绍本文开头现象…

对不起,我不是一个自律的人

大家好&#xff0c;我是 &#x1f41f;&#x1f4a8;。前天&#xff0c;星球 的一位大学生朋友问了我几个问题&#xff1a;你大学时如何安排每日的时间&#xff1f;为什么能学那么多技术&#xff1f;你会学习到很晚吗&#xff1f;你是如何保持自律的&#xff1f;我觉得这几个问…

保证接口数据安全的10种方案

前言 大家好&#xff0c;我是程序汪&#xff0c;互联网项目需要特别注意数据安全&#xff0c;如果你简历上是互联网类型项目&#xff0c;安全方面肯定要能说出个一二三&#xff0c;下面分享下这方面的干货&#xff0c;大家可以记住几条&#xff0c;面试时好说道说道 我们日常…

Html5本地存储LocalStorage

HTML5 提供了两种在客户端存储数据的新方法&#xff1a; localStorage - 没有时间限制的数据存储sessionStorage - 针对一个 session 的数据存储在浏览器中打开审查元素&#xff08;如谷歌F12&#xff09;&#xff0c;在Resources下面可以查看里面的数据。 localStorage提供了几…

java第一季2.2

2019独角兽企业重金招聘Python工程师标准>>> 标识符&#xff1a; 是给变量类方法命名的符号、标识符开头可以_、字母、$命名&#xff0c;不可以用数字命名。关键字不可命名&#xff0c;大小写区分。不可以用非法字符 变量&#xff1a;变量类型。变量名。变量值。如&…

读《华为数字化转型之道》

数字化转型应该很多人都听过&#xff0c;但如果你做过 ToB 软件&#xff0c;听得更多的是信息化&#xff0c;那信息化和数字化是什么关系呢&#xff1f;下面用一个小例子来说说我的理解。记得刚上初中的时候&#xff0c;平时测验、考试的试卷&#xff0c;都是人工在板上进行刻写…

Thrift基本原理及使用

参考文章RPC 基本原理与 Apach Thrift 初体验 RPC基本原理 RPC(Remote Procedure Call)&#xff0c;远程过程调用&#xff0c;大部分的RPC框架都遵循如下三个开发步骤&#xff1a; 1. 定义一个接口说明文件&#xff1a;描述了对象(结构体)、对象成员、接口方法等一系列信息&am…

01-H5语义化标签

转载于:https://www.cnblogs.com/Zeki/p/5901399.html

配置中心 App Configuration (三):配置的动态更新

Get Azure key-value pairs from App configuration | Serverless360写在前面我在前文&#xff1a;《微软Azure配置中心 App Configuration (一)&#xff1a;轻松集成到Asp.Net Core》已经介绍了Asp.net Core怎么轻易的接入azure 配置中心App Configuration(下称azure 配置中心…

万字总结 JS 数据结构与常用的算法

前言 首先&#xff0c;为什么我会学习数据结构与算法呢&#xff0c;其实主要是有两方面 第一&#xff0c;是我在今年的flag里明确说到我会学这个东西第二&#xff0c;学了这些&#xff0c;对自己以后在工作或者面试也会带来许多好处然后&#xff0c;本文是最近学习的一个总结文…

精通Java设计模式从初见到相爱之工厂+策略模式(3)

为什么80%的码农都做不了架构师&#xff1f;>>> 1、公司项目需求。 用户签到活动&#xff0c;会员签到怎么处理&#xff0c;超级会员怎么处理&#xff0c;普通用户签到怎么处理&#xff0c;针对不同的档次&#xff0c;有不同的方案&#xff0c;所以在项目中用到了策…

jquery weui 中alert弹出框在ios中跳动问题

问题描述&#xff1a; jquery-weui中的弹出框在ios上会有一个右下角向中间滑动的效果&#xff0c;在Android上没有这个效果。 解决方法&#xff1a; 修该jquery-weui.js中的openModal方法如下图: 转载于:https://www.cnblogs.com/xianZJ/p/6773097.html

WPF效果第一百九十五篇之又玩ListBox

ListBox一直是我的最爱;今天再次基于他玩耍一下不一样的效果;闲话不多扯直接看效果:1、这次直接用的ItemContainerStyle:2、通过HitTest实现点选边框&#xff1a;Point point e.GetPosition(LightDarkListBox); VisualTreeHelper.HitTest(LightDarkListBox, new HitTestFilter…

Web3,互联网新造神“机器”?

本文来自微信公众号&#xff1a;每经头条 &#xff08;ID&#xff1a;nbdtoutiao&#xff09;&#xff0c;作者&#xff1a;李蕾&#xff0c;编辑&#xff1a;肖芮冬&#xff0c;头图来自&#xff1a;视觉中国 “与目前的互联网相比&#xff0c;Web3基于区块链等底层技术&#…

普通中年人的真实出路

阅读本文大概需要6分钟。互联网人甚至中国整体的用工市场的确有中年淘汰的问题&#xff0c;我们可以当它不存在&#xff0c;甚至当有人给出解法的时候&#xff0c;我们也可以认为他们在传播焦虑&#xff0c;但事实就是事实&#xff0c;它的存在不随个人意愿而转移。最近抖音上有…

项目管理常见的问题

综合管理 缺乏企业级的项目管理平台;项目目标不清楚;项目经理不了解项目管理流程和工具;项目模板不统一;计划意识薄弱&#xff0c;缺乏规范的分解。难以过程监控&#xff0c;实时地了解项目进度,靠手工统计和汇报项目进度&#xff0c;难以真实反映进度。项目控制不力&#xff0…

【温故知新】C# Linq中 Select SelectMany 使用技巧

微信公众号&#xff1a;趣编程ACE关注可了解更多的.NET日常实战开发技巧&#xff0c;如需源码 后台回复 源码 即可;如果觉得对你有帮助&#xff0c;欢迎关注C# Linq中 Select && SelectMany 使用技巧Select 和 SelectMany 是我们开发中对集合常用的两个扩展方法&#x…

bzoj4870

http://www.lydsy.com/JudgeOnline/problem.php?id4870 矩阵快速幂。。。 人话题意&#xff1a;从nk个物品里选模k余r个物品&#xff0c;问方案数模P 那么我们有方程 f[i][j]f[i-1][j]f[i-1][j-1] 跟组合数一个样子 j∈(0,k) 这个物品选还是不选加起来 构造矩阵&#xff1a;x.…

Codeforces Round #410 (Div. 2) D. Mike and distribution 思维+数学

链接&#xff1a; http://codeforces.com/contest/798/problem/D 题意&#xff1a; 给你两个长度为n的数列a和b&#xff0c;让你选n/21个下标&#xff0c;使得2*∑ai>suma,2*∑bi>sumb 题解1&#xff1a; 用一个叫random_shuffle的东西&#xff0c;每次都乱选&#xff0c…

PerfView专题 (第三篇):如何寻找 C# 中的 VirtualAlloc 内存泄漏

一&#xff1a;背景 上一篇我们聊到了如何用 PerfView 去侦察 NTHeap 的内存泄漏&#xff0c;这种内存泄漏往往是用 C 的 malloc 或者 C 的 new 分配而不释放所造成的&#xff0c;这一篇我们来聊一下由 VirtualAlloc 方法造成的泄漏如何去甄别&#xff1f;了解 VirtualAlloc 的…