asp.net core web api 使用apollo配置更改回调监听

ops/2024/9/24 7:40:16/
  1. 安装依赖包
   > Com.Ctrip.Framework.Apollo                         2.10.0   2.10.0> Com.Ctrip.Framework.Apollo.ConfigAdapter.Yaml      2.9.0    2.9.0 > Com.Ctrip.Framework.Apollo.Configuration           2.10.2   2.10.2> Com.Ctrip.Framework.Apollo.ExtensionsHosting       2.10.1   2.10.1
  1. 修改appsettings.json
  "Apollo": {"AppId": "ellis","Env": "DEV","MetaServer": "http://192.168.214.133:30080","ConfigServer": [ "http://192.168.214.133:30080" ],}
  1. 添加配置类
using Com.Ctrip.Framework.Apollo.Internals;
using Microsoft.Extensions.Primitives;namespace CoreApollo
{public class MyConfigService{private readonly IConfiguration _configuration;public static Dictionary<string,string> configDictionary = new Dictionary<string, string>();public static object lockobj = new object();public MyConfigService(IConfiguration configuration){_configuration = configuration;// 监听配置变更ChangeToken.OnChange(() => _configuration.GetReloadToken(), OnConfigChanged);}public string GetConfig(string key){return  _configuration[key];}private void OnConfigChanged(){Console.WriteLine("Apollo configuration has changed!");lock(lockobj){foreach (var section in _configuration.AsEnumerable()){configDictionary[section.Key] = section.Value;}}Console.WriteLine("re init");}}
}
  1. 依赖注入
using Com.Ctrip.Framework.Apollo;
using CoreApollo;//YamlConfigAdapter.Register();var builder = WebApplication.CreateBuilder(args);builder.Configuration.AddApollo(builder.Configuration.GetSection("Apollo")).AddDefault();builder.Services.AddScoped<MyConfigService>();
  1. controller
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;namespace CoreApollo.Controllers
{[Route("api/[controller]/[action]")][ApiController]public class ApolloController : ControllerBase{private readonly IConfiguration _configuration;private readonly MyConfigService _myConfigService;public ApolloController(IConfiguration configuration, MyConfigService myConfigService){_configuration = configuration;_myConfigService = myConfigService;}[HttpGet]public IActionResult GetConfig(string key){var myConfigValue = _myConfigService.GetConfig(key);return Ok(myConfigValue);}}
}

参考
https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/change-tokens?view=aspnetcore-8.0#simple-startup-change-token

https://www.apolloconfig.com/#/zh/client/dotnet-sdk-user-guide


http://www.ppmy.cn/ops/115186.html

相关文章

patch 命令:补丁的应用

一、命令简介 ​diff​ 和 patch​ 是传统的文件比较和应用差异的工具&#xff0c;而 git​ 是一个更现代、功能更全面的版本控制系统&#xff0c;它内置了 diff​ 和 patch​ 的功能&#xff0c;并且提供了更多用于代码管理和协作的高级特性。 diff, patch 和 git 之间的关系…

冒泡排序bubble sort

冒泡排序&#xff08;bubble sort&#xff09;通过连续地比较与交换相邻元素实现排序。这个过程就像气泡从底部升到顶部一样&#xff0c;因此得名冒泡排序。 算法流程 def bubble_sort(nums: list[int]):"""冒泡排序"""n len(nums)# 外循环&…

ubuntu、linux安装redis(使用tar包的方式)

目录 1、准备redis的tar包 2、执行make 3、执行make install 4、运行redis 5、总结 1、准备redis的tar包 去官网或者github上下载对应的tar包&#xff0c;我下载的是 redis-6.2.14.tar.gz 上传到ubuntu后&#xff0c;使用指令进行解压&#xff1a; tar -xvf redis-6.2.14.t…

【软件造价咨询】软件每年运维费用取开发费用百分之几合适

应用软件的运维费用相对于系统开发建设费用的占比因项目而异&#xff0c;但可以通过一些行业标准和基准数据来进行估算。根据北京软件造价评估联盟2020至2023年发布的《中国软件行业基准数据》CSBMK文件&#xff0c;在这项文件中用百分位数统计列出了“应用软件运维费用占比”的…

MapReduce基本原理

目录 整体执行流程​ Map端执行流程 Reduce端执行流程 Shuffle执行流程 整体执行流程 八部曲 读取数据--> 定义map --> 分区 --> 排序 --> 规约 --> 分组 --> 定义reduce --> 输出数据 首先将文件进行切片&#xff08;block&#xff09;处理&#xff…

十三 系统架构设计(考点篇)

1 软件架构的概念 一个程序和计算系统软件体系结构是指系统的一个或者多个结构。结构中包括软件的构件&#xff0c;构件 的外部可见属性以及它们之间的相互关系。 体系结构并非可运行软件。确切地说&#xff0c;它是一种表达&#xff0c;使软件工程师能够&#xff1a; (1)分…

LabVIEW软件出现Bug如何解决

在LabVIEW开发中&#xff0c;程序出现bug是不可避免的。无论是小型项目还是复杂系统&#xff0c;调试与修复bug都是开发过程中的重要环节。下文介绍如何有效解决LabVIEW软件中的bug&#xff0c;包括常见错误类型、调试工具、错误处理机制。 1. 常见Bug类型分析 在LabVIEW中&am…

RHCS认证-Linux(RHel9)-Ansible

文章目录 一、ansible 简介二 、ansible部署三、ansible服务端测试四 、ansible 清单inventory五、Ad-hot 点对点模式六、YAML语言模式七、RHCS-Ansible附&#xff1a;安装CentOS-Stream 9系统7.1 ansible 执行过程7.2 安装ansible&#xff0c;ansible-navigator7.2 部署ansibl…