热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

.NetCore实现选择数据热更新让服务感知配置的变化

这篇文章主要介绍了.NetCore实现选择数据热更新让服务感知配置的变化,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

1、说明

当一些配置需要修改在进行获取时,通常做法是修改完配置文件后再重启web服务器或者docker进行完成,下面我介绍一种热更新方法,修改完配置文件后,不需要重启服务器即可获取最新的配置文件,让服务感知配置的变化。

2、实践

下面我通过二种方式来讲解一下.Net Core实现选择数据热更新,让服务感知配置的变化。

2.1 通过AddSingleton单例方式注入,然后使用 IOptionsMonitor实现数据热更新

2.1.1 首先在Startup.cs文件中的ConfigureServices方法添加配置

//通过读取配置文件加载到SystemPath类中
services.Configure(Configuration.GetSection("SystemPath"));
//添加服务注入
services.AddSingleton();
public class SystemPath
  {
    public string FilePath { get; set; }
  }

2.1.2 在PathService构造器中注入IOptionsMonitor实现数据热更新

public class PathService : IPathService
  {
    IOptionsMonitor _options;
    /// 
    /// 构造函数
    /// 
    /// 
    public PathService(IOptionsMonitor options)
    {
      _optiOns= options;
    }
    public string GetPath()
    {
      return _options.CurrentValue.FilePath;
    }
  }

2.1.3 在PathController中通过调用接口方式读取最新配置路径

/// 
  /// 路径
  /// 
  [Route("api/[controller]/[action]")]
  [ApiController]
  public class PathController : ControllerBase
  {
    private readonly IPathService _pathService;
    /// 
    /// 构造函数
    /// 
    /// 
    public PathController(IPathService pathService)
    {
      _pathService = pathService;
    }
    /// 
    /// 获取系统路径
    /// 
    /// 
    [HttpGet]
    public MethodResult GetSystemPath()
    {
      return new MethodResult(_pathService.GetPath());
    }
  }

运行看一下效果:

现在读取到的路径是D:/File/2.jpg,我们修改一下配置文件然后重新调用接口看一下,这时会更新最新的路径。

 

2.2 通过AddScoped 方式注入,然后使用 IOptionsSnapshot 实现数据热更新

2.2.1 首先在Startup.cs文件中的ConfigureServices方法添加配置

//通过读取配置文件加载到SystemPath类中
services.Configure(Configuration.GetSection("SystemPath"));
//添加服务注入
services.AddScoped();
public class SystemPath
  {
    public string FilePath { get; set; }
  }

2.2.2 在PathService构造器中注入IOptionsMonitor实现数据热更新

public class PathService : IPathService
  {
    IOptionsSnapshot _options;
    /// 
    /// 构造函数
    /// 
    /// 
    public PathService(IOptionsSnapshot options)
    {
      _optiOns= options;
    }
    public string GetPath()
    {
      return _options.Value.FilePath;
    }
  }

2.2.3 在PathController中通过调用接口方式读取最新配置路径

/// 
  /// 路径
  /// 
  [Route("api/[controller]/[action]")]
  [ApiController]
  public class PathController : ControllerBase
  {
    private readonly IPathService _pathService;
    /// 
    /// 构造函数
    /// 
    /// 
    public PathController(IPathService pathService)
    {
      _pathService = pathService;
    }
    /// 
    /// 获取系统路径
    /// 
    /// 
    [HttpGet]
    public MethodResult GetSystemPath()
    {
      return new MethodResult(_pathService.GetPath());
    }
  }

运行看一下效果:

现在读取到的路径是D:/File/2.jpg,我们修改一下配置文件然后重新调用接口看一下,这时会更新最新的路径。

 

到此这篇关于.Net Core实现选择数据热更新让服务感知配置的变化的文章就介绍到这了,更多相关.Net Core数据热更新内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • 科研单位信息系统中的DevOps实践与优化
    本文探讨了某科研单位通过引入云原生平台实现DevOps开发和运维一体化,显著提升了项目交付效率和产品质量。详细介绍了如何在实际项目中应用DevOps理念,解决了传统开发模式下的诸多痛点。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 如何将本地Docker镜像推送到阿里云容器镜像服务
    本文详细介绍将本地Docker镜像上传至阿里云容器镜像服务的步骤,包括登录、查看镜像列表、推送镜像以及确认上传结果。通过本文,您将掌握如何高效地管理Docker镜像并将其存储在阿里云的镜像仓库中。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • docker镜像重启_docker怎么启动镜像dock ... [详细]
  • 应对.avast后缀勒索病毒:全面指南
    本文详细介绍了.avast后缀勒索病毒的特性、感染途径、恢复方法及预防措施,旨在帮助用户有效应对这一威胁。 ... [详细]
  • NFS(Network File System)即网络文件系统,是一种分布式文件系统协议,主要用于Unix和类Unix系统之间的文件共享。本文详细介绍NFS的配置文件/etc/exports和相关服务配置,帮助读者理解如何在Linux环境中配置NFS客户端。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • 本文档详细介绍了在 Kubernetes 集群中部署 ETCD 数据库的过程,包括实验环境的准备、ETCD 证书的生成及配置、以及集群的启动与健康检查等关键步骤。 ... [详细]
  • Java EE CDI:解决依赖关系冲突的实例
    在本教程中,我们将探讨如何在Java EE的CDI(上下文和依赖注入)框架中有效解决依赖关系的冲突问题。通过学习如何使用限定符,您将能够为应用程序的不同客户端提供多种接口实现,并确保每个客户端都能正确调用其所需的实现。 ... [详细]
  • 尽管PHP是一种强大且灵活的Web开发语言,但开发者在使用过程中常会陷入一些典型的陷阱。本文旨在列出PHP开发中最为常见的10种错误,并提供相应的预防建议。 ... [详细]
  • 在 Android 开发中,通过 Intent 启动 Activity 或 Service 时,可以使用 putExtra 方法传递数据。接收方可以通过 getIntent().getExtras() 获取这些数据。本文将介绍如何使用 RoboGuice 框架简化这一过程,特别是 @InjectExtra 注解的使用。 ... [详细]
  • Kubernetes与Docker cgroup驱动不匹配问题及解决方案
    当Kubernetes (k8s) 的cgroup驱动设置为systemd,而Docker使用的是cgroupfs时,这种不一致性可能导致kubectl命令执行失败。本文将详细介绍如何检查和调整Docker的cgroup驱动以确保与Kubernetes兼容。 ... [详细]
author-avatar
kimjizi
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有