ocelot 配置文件的动态更新
本文意在通过ocelot 了解asp.net core 对配置文件的动态更新机制。
一 配置文件与对象绑定
UseOcelot方法调用时会执行配置文件对象创建,CreateConfiguration方法有个重要的对象 IOptionsMonitor<FileConfiguration> 通过
fileConfig.onchange 注册回调方法 更改存储库。实现对内存对象FileConfiguration 的更新。
public static async Task<IApplicationBuilder> UseOcelot(this IApplicationBuilder builder, OcelotPipelineConfiguration pipelineConfiguration){var configuration = await CreateConfiguration(builder); // ***}private static async Task<IInternalConfiguration> CreateConfiguration(IApplicationBuilder builder){// make configuration from file system?// earlier user needed to add ocelot files in startup configuration stuff, asp.net will map it to thisvar fileConfig = builder.ApplicationServices.GetService<IOptionsMonitor<FileConfiguration>>();// now create the config// ***fileConfig.OnChange(async (config) =>{var newInternalConfig = await internalConfigCreator.Create(config);internalConfigRepo.AddOrReplace(newInternalConfig.Data);});}
先来看看IOptionsMonitor<T> 定义如下:
public interface IOptionsMonitor<out TOptions>{TOptions CurrentValue { get; }TOptions Get(string name);IDisposable OnChange(Action<TOptions, string> listener);}
IOptionsMonitor 从下面的服务注册可知 是OptionsMonitor<>
public static IServiceCollection AddOptions(this IServiceCollection services){ // ***services.TryAdd(ServiceDescriptor.Singleton(typeof(IOptionsMonitor<>), typeof(OptionsMonitor<>)));return services;}
一 物理文件最终处理
public static void Main(string[] args){BuildWebHost(args).Run();}public static IWebHost BuildWebHost(string[] args) =>WebHost.CreateDefaultBuilder(args).ConfigureAppConfiguration((context, builder) => {builder.SetBasePath(context.HostingEnvironment.ContentRootPath).AddJsonFile("Ocelot.json");}).UseUrls("http://localhost:6000").UseStartup<Startup>().Build();
webhost build的过程中都会绑定物理文件,如上的AddJsonFile。AddJsonFile的定义如下
public static IConfigurationBuilder AddJsonFile(this IConfigurationBuilder builder, IFileProvider provider, string path, bool optional, bool reloadOnChange)
通过IFileProvider的实现,通过system.io对文件系统监控 实现最终的物理文件更改通知到上层。
二
转载于:https://www.cnblogs.com/RunStone/p/9531159.html
ocelot 配置文件的动态更新相关推荐
- android 动态更新配置文件,基于DX的Android动态更新技术
原标题:基于DX的Android动态更新技术 转自:文/Mob开发者平台 技术副总监 余勋杰 DX简介 安卓程序的主要代码是java 代码,不过由于安卓系统不直接使用sun的jvm,所以从javac编 ...
- Centos DNS服务(二)-bind主从配置与基于TSIG加密的动态更新
DNS的主从配置 DNS从服务器也叫辅服DNS服务器,如果网络上某个节点只有一台DNS服务器的话,首先服务器的抗压能力是有限的,当压力达到一定的程度,服务器就可能会宕机罢工, 其次如果这台服务器出现了 ...
- Nacos支持配置的动态更新
// 注入配置文件上下文 @Autowired private ConfigurableApplicationContext applicationContext;@GetMapping(value ...
- seo vue 动态路由_基于vue.jsvue-router的动态更新TDK(SEO优化)
本文基于工作项目开发,做的整理笔记 前几天帮朋友解决这个问题,顺带学习了一下,做个笔记Mark下. 前提条件: 你已经了解并使用vue,能够搭建应用站点. 编码环境: system:OS X EI C ...
- 通过阿里云K8S Ingress Controller实现路由配置的动态更新
简介 在Kubernetes集群中,Ingress作为集群内服务对外暴露的访问接入点,其几乎承载着集群内服务访问的所有流量.我们知道,Nginx Ingress Controller是Kubernet ...
- 我的INI 配置文件读写动态库
工作需要,今天上午花时间看了一下INI 配置文件的相关文章,并添加到项目中. 后来想想,干脆封装成DLL 动态库,并提供给大家使用,顺便更新一下博客.^_^ INI 配置文件的格式 在早期的Windo ...
- 在运行SSIS包时,如何动态更新变量值
实现方式: 若要动态更新变量,可以为变量创建配置,将这些配置部署到包中,然后在部署包时更新配置文件中的变量值.这样,在运行时,包就可以使用更新后的变量值. 下面通过一个简单的例子来说明如何实现动态更新 ...
- dhcp服务器显示dns服务器更新挂起,如何动态更新DNS记录
如何动态更新DNS记录.md 零.概述 一般来说,DNS记录都是手动更新的,通过修改配置文件,或者通过网站页面,但是如何才能简化工作,使部分DNS记录更新自动化呢? 这就是本文关注的内容. 一.通过D ...
- Drools7 动态更新规则
动态更新规则 上一章节讲述了 Drools7 和 Springboot2 集成使用,集成工作相对简单.可以快速开发.但是缺点也很明显,规则和配置文件绑定在项目中(耦合度太高).如果你不需要修改规则文件 ...
- 动态更新阿里云DDNS解析记录的IPv6地址,随时随地用域名远程访问自己的电脑【如何远程访问家里的电脑】
远程访问电脑 日志 简介 要求 1. 获取两台电脑 2.IPv6网络 2.1检查光猫 2.2检查路由器 2.3配置电脑防火墙 2.3.1添加ICMPv6协议 2.3.2配置SMB协议 2.4配置远程桌 ...
最新文章
- 常惠琢 201771010102《面向对象程序设计(java)》第七周学习总结
- MaxCompute2.0新功能介绍
- Nhibernate 3.0 cookbook学习笔记 一对多与多对多映射
- 如何正确关闭游戏服务器
- Tomcat部署的三种方式
- (2) java项目中用redis
- 《CSS揭秘》学习demo:第三章 形状
- Kafka笔记-Kafka集群搭建
- python opencv显示图片动态_opencv-python计算机视觉图像处理学习笔记2——打开图片,保存图片,显示图片...
- ES+Redis+MySQL,这个高可用架构设计太顶了!
- 计算机硬件故障诊断的原则,计算机硬件常见故障诊断和维护.doc
- eds能谱图分析实例_热场发射扫描电子显微镜与能谱分析仪
- Day51:HEIL AI
- android 2d mmorpg,20款不可错过,史上最佳的MMORPG游戏(下)
- 计算机开机后黑屏鼠标显示桌面图标,电脑开机后黑屏怎么解决只显示鼠标
- Git及Github之入门到进阶
- 2021年自然人代开政策继续,综合税率1.5%左右
- Java语言中print、println和printf的区别
- 网易域名邮箱支持POP3/SMTP服务
- Ubuntu折腾--优化wine 微信小黑框处理
热门文章
- EJB3在JBoss5内集群探究
- Linux下硬盘分区的最佳方案
- poj 动态规划总结
- 在 Mac 上拷贝(复制)、粘贴的方法
- 汉化:Blocs for Mac(可视化网页设计工具)4.5.0
- MAMP Pro for Mac(PHP/MySQL开发环境工具)
- System Toolkit for Mac(Mac系统维护工具)
- Mac 启动时屏幕上的特殊图像标识都是什么意思
- 如何使用Wondershare UniConverter应用效果并调整音量
- 我是如何在自学编程9个月后找到工作的