本文意在通过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 配置文件的动态更新相关推荐

  1. android 动态更新配置文件,基于DX的Android动态更新技术

    原标题:基于DX的Android动态更新技术 转自:文/Mob开发者平台 技术副总监 余勋杰 DX简介 安卓程序的主要代码是java 代码,不过由于安卓系统不直接使用sun的jvm,所以从javac编 ...

  2. Centos DNS服务(二)-bind主从配置与基于TSIG加密的动态更新

    DNS的主从配置 DNS从服务器也叫辅服DNS服务器,如果网络上某个节点只有一台DNS服务器的话,首先服务器的抗压能力是有限的,当压力达到一定的程度,服务器就可能会宕机罢工, 其次如果这台服务器出现了 ...

  3. Nacos支持配置的动态更新

    // 注入配置文件上下文 @Autowired private ConfigurableApplicationContext applicationContext;@GetMapping(value ...

  4. seo vue 动态路由_基于vue.jsvue-router的动态更新TDK(SEO优化)

    本文基于工作项目开发,做的整理笔记 前几天帮朋友解决这个问题,顺带学习了一下,做个笔记Mark下. 前提条件: 你已经了解并使用vue,能够搭建应用站点. 编码环境: system:OS X EI C ...

  5. 通过阿里云K8S Ingress Controller实现路由配置的动态更新

    简介 在Kubernetes集群中,Ingress作为集群内服务对外暴露的访问接入点,其几乎承载着集群内服务访问的所有流量.我们知道,Nginx Ingress Controller是Kubernet ...

  6. 我的INI 配置文件读写动态库

    工作需要,今天上午花时间看了一下INI 配置文件的相关文章,并添加到项目中. 后来想想,干脆封装成DLL 动态库,并提供给大家使用,顺便更新一下博客.^_^ INI 配置文件的格式 在早期的Windo ...

  7. 在运行SSIS包时,如何动态更新变量值

    实现方式: 若要动态更新变量,可以为变量创建配置,将这些配置部署到包中,然后在部署包时更新配置文件中的变量值.这样,在运行时,包就可以使用更新后的变量值. 下面通过一个简单的例子来说明如何实现动态更新 ...

  8. dhcp服务器显示dns服务器更新挂起,如何动态更新DNS记录

    如何动态更新DNS记录.md 零.概述 一般来说,DNS记录都是手动更新的,通过修改配置文件,或者通过网站页面,但是如何才能简化工作,使部分DNS记录更新自动化呢? 这就是本文关注的内容. 一.通过D ...

  9. Drools7 动态更新规则

    动态更新规则 上一章节讲述了 Drools7 和 Springboot2 集成使用,集成工作相对简单.可以快速开发.但是缺点也很明显,规则和配置文件绑定在项目中(耦合度太高).如果你不需要修改规则文件 ...

  10. 动态更新阿里云DDNS解析记录的IPv6地址,随时随地用域名远程访问自己的电脑【如何远程访问家里的电脑】

    远程访问电脑 日志 简介 要求 1. 获取两台电脑 2.IPv6网络 2.1检查光猫 2.2检查路由器 2.3配置电脑防火墙 2.3.1添加ICMPv6协议 2.3.2配置SMB协议 2.4配置远程桌 ...

最新文章

  1. 常惠琢 201771010102《面向对象程序设计(java)》第七周学习总结
  2. MaxCompute2.0新功能介绍
  3. Nhibernate 3.0 cookbook学习笔记 一对多与多对多映射
  4. 如何正确关闭游戏服务器
  5. Tomcat部署的三种方式
  6. (2) java项目中用redis
  7. 《CSS揭秘》学习demo:第三章 形状
  8. Kafka笔记-Kafka集群搭建
  9. python opencv显示图片动态_opencv-python计算机视觉图像处理学习笔记2——打开图片,保存图片,显示图片...
  10. ES+Redis+MySQL,这个高可用架构设计太顶了!
  11. 计算机硬件故障诊断的原则,计算机硬件常见故障诊断和维护.doc
  12. eds能谱图分析实例_热场发射扫描电子显微镜与能谱分析仪
  13. Day51:HEIL AI
  14. android 2d mmorpg,20款不可错过,史上最佳的MMORPG游戏(下)
  15. 计算机开机后黑屏鼠标显示桌面图标,电脑开机后黑屏怎么解决只显示鼠标
  16. Git及Github之入门到进阶
  17. 2021年自然人代开政策继续,综合税率1.5%左右
  18. Java语言中print、println和printf的区别
  19. 网易域名邮箱支持POP3/SMTP服务
  20. Ubuntu折腾--优化wine 微信小黑框处理

热门文章

  1. EJB3在JBoss5内集群探究
  2. Linux下硬盘分区的最佳方案
  3. poj 动态规划总结
  4. 在 Mac 上拷贝(复制)、粘贴的方法
  5. 汉化:Blocs for Mac(可视化网页设计工具)4.5.0
  6. MAMP Pro for Mac(PHP/MySQL开发环境工具)
  7. System Toolkit for Mac(Mac系统维护工具)
  8. Mac 启动时屏幕上的特殊图像标识都是什么意思
  9. 如何使用Wondershare UniConverter应用效果并调整音量
  10. 我是如何在自学编程9个月后找到工作的