【问题标题】:Netflix Archaius Dynamic ConfigurationNetflix Archaius 动态配置
【发布时间】:2016-06-13 06:00:12
【问题描述】:

我正在将 Hystrix 集成到我现有的项目中,并且我想从 xml 文件中读取配置值,而不是使用 Configuration Manager 提供配置属性。当 xml 文件中的值更新时,我希望在运行时更新 Hystrix 配置。

这是我正在遵循的指南: https://github.com/Netflix/archaius/wiki/Users-Guide

目前我了解可以使用 PolledConfigurationSource 和以下代码:

PolledConfigurationSource source = ...
AbstractPollingScheduler scheduler = ...
DynamicConfiguration configuration = new DynamicConfiguration(source, scheduler);
ConfigurationManager.install(configuration);

如何将 PolledConfigurationSource 指向 xml 文件以在固定时间间隔后读取属性?

【问题讨论】:

    标签: java hystrix netflix-archaius


    【解决方案1】:

    以下代码对我有用

    private void initializeConfiguration() {
    
        // FixedDelayPollingScheduler is initialized with default system
        // settings
        // Fixed delay in milliseconds between two reads of the configuration
        // URLs
        // archaius.fixedDelayPollingScheduler.delayMills = 60000
        // Initial delay in milliseconds of reading from the configuration
        // source
        // archaius.fixedDelayPollingScheduler.initialDelayMills = 30000
        AbstractPollingScheduler scheduler = new FixedDelayPollingScheduler();
    
        // Configuration source that brings dynamic changes to the configuration
        // via polling
        PolledConfigurationSource source = new XMLPolledConfigurationSource();
    
        // Configuration that polls a PolledConfigurationSource according to the
        // schedule set by a scheduler
        DynamicConfiguration configuration = new DynamicConfiguration(source, scheduler);
    
        ConfigurationManager.install(configuration);
    
        // Registering configuration with an MBean and will be accessible for
        // read and update via JConsole
        ConfigJMXManager.registerConfigMbean(configuration);
    }
    

    XMLPolledConfigurationSource源代码

    public class XMLPolledConfigurationSource implements PolledConfigurationSource {
    
    @SuppressWarnings("static-access")
    @Override
    public PollResult poll(boolean inital, Object checkPoint) throws Exception {
        PollResult pollResult = null;
        Map<String, Object> map = new HashMap<>();
        // Code to read content from the resource
        return pollResult.createFull(map);
      }
    }
    

    【讨论】:

      【解决方案2】:

      您是否尝试过按照文档设置此系统变量? -Darchaius.configurationSource.additionalUrls=file:///apps/myapp/application.xml 通过文档,我指的是入门网页https://github.com/Netflix/archaius/wiki/Getting-Started

      【讨论】:

      • 嗯,如何将 -Darchaius.configurationSource.additionalUrls 设置为 src/main/resource 文件夹中的 xml 文件?
      • 除此之外,还有人可以使用 PolledConfigurationSource 吗?按照指南中的建议,我将扩展 PolledConfigurationSource 类并使用 StAX 解析器从文件中读取内容,将它们放入 HashMap 并设置 PollResult.createFull(map);
      • 您在运行 java 应用程序时将其作为参数传递并仅使用文件名,它将解析其在类路径中的路径...如果它是一个自我可执行的 jar,您会这样做java -jar myapp.jar -Darchaius...=config.xml。应该根据文档工作
      • 我尝试了 additionalUrls 方法,但遗憾的是 Hystrix 没有获取文件。我想我会尝试我在之前评论中提到的方法。
      猜你喜欢
      • 2018-11-21
      • 2023-03-29
      • 1970-01-01
      • 2018-04-20
      • 2016-05-28
      • 2018-06-14
      • 2023-02-02
      • 2014-12-18
      • 2017-03-07
      相关资源
      最近更新 更多