配置中心 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.pswp.cn/news/283746.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/283746.shtml
英文地址,請注明出處:http://en.pswp.cn/news/283746.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

stop-hbase.sh一直處于等待狀態

今天關閉HBase時&#xff0c;輸入stop-hbase.sh一直處于等待狀態 解決方法&#xff1a; 先輸入&#xff1a;hbase-daemon.sh stop master 再輸入&#xff1a;stop-hbase.sh就可以關閉HBase集群了。 轉載于:https://www.cnblogs.com/lijinze-tsinghua/p/8667761.html

shell編程100例

1、編寫hello world腳本 #!/bin/bash# 編寫hello world腳本echo "Hello World!"2、通過位置變量創建 Linux 系統賬戶及密碼 #!/bin/bash# 通過位置變量創建 Linux 系統賬戶及密碼#$1 是執行腳本的第一個參數,$2 是執行腳本的第二個參數 useradd "$1" …

sqlserver 分頁

select top 10 numComImg.* from( select row_number() over(order by id asc) as rownumber,* from (select * FROM [TCCLine].[dbo].[CLine_CommonImage]) as comImg)as numComImg where rownumber>40select top 10 * --10 為頁大小from [TCCLine].[dbo].[CLine_CommonIma…

詳解SpringMVC中Controller的方法中參數的工作原理[附帶源碼分析] good

目錄 前言現象源碼分析 HandlerMethodArgumentResolver與HandlerMethodReturnValueHandler接口介紹HandlerMethodArgumentResolver與HandlerMethodReturnValueHandler接口的具體應用常用HandlerMethodArgumentResolver介紹常用HandlerMethodReturnValueHandler介紹本文開頭現象…

instancing render

當要繪制同一個東西很多次的時候&#xff0c;最簡單的想法可能是循環調用glDrawArrays()&#xff0c;但這樣會造成性能的損失。因為當顯卡在渲染一個物體的時候&#xff0c;可能并不需要太多時間&#xff0c;但系統會花大量的時間&#xff0c;頻繁的調用draw命令&#xff0c;再…

對不起,我不是一個自律的人

大家好&#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提供了幾…

python 中的os模塊

python os模塊 Python os 模塊提供了一個統一的操作系統接口函數一、對于系統的操作1、os.name 當前使用平臺其中 ‘nt’ 是 windows&#xff0c;’posix’ 是linux 或者 unix2、os.sep輸出操作系統的特定的路徑分隔符。Win下為“\”&#xff0c;Linux下為“/”3、os.pathsep 輸…

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

JSON 解析的兩種方法

今天幫朋友看了下JSON解析結果 eval解析JSON中的注意點在JS中將JSON的字符串解析成JSON數據格式&#xff0c;一般有兩種方式&#xff1a; 1.一種為使用eval()函數。 2. 使用Function對象來進行返回解析。 使用eval函數來解析&#xff0c;并且使用jquery的each方法來遍歷 用jque…

配置中心 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基于區塊鏈等底層技術&#…