hystrix配置中Apollo与Archaius对比分析

下面是关于“hystrix配置中Apollo与Archaius对比分析”的完整攻略。

1. 什么是Hystrix

Hystrix是一个库,用于隔离远程系统,服务或第三方库,防止它们故障并使自己的应用程序保持连续性,并实现弹性、弹性、监控和回退机制。

2. Hystrix中的配置管理

在Hystrix中,除了默认的配置外,大多数配置都可以在运行时进行更改。Hystrix配置的操作有非常多的方式,其中Apollo和Archaius就是两种常用的操作方式。

2.1 Apollo配置方式

Apollo是携程框架部门开源出来的一个分布式配置中心。在Hystrix中,配置通过Apollo加载,实现动态配置。

示例一

为了演示Apollo配置方式,我们可以创建一个简单的应用程序,首先,在POM文件中添加以下依赖:

<dependency>
  <groupId>com.ctrip.framework.apollo</groupId>
  <artifactId>apollo-client</artifactId>
  <version>1.1.1</version>
</dependency>

其次,将下面代码添加到应用程序中:

public class AppConfig { 
    private static volatile Properties prop = null; 
    private static ApolloConfig confi; 
    private static final String DEFAULT_APPLICATION_NAMESPACE = "test"; 
    private static final String aplloMetaUrl = "http://10.101.3.13:8080"; //指定Apollo中的meta地址,自行替换

    static{ 
        boolean setup = false; 

        try { 
            ConfigService.enableAutoUpdate(5000); 
            Config config = ConfigService.getAppConfig(); 
            String env = config.getProperty("environment", "DEV");
            String namespace = config.getProperty("apollo.meta.namespace", DEFAULT_APPLICATION_NAMESPACE);
            String appId = config.getProperty("apollo.meta.appId"); 
            confi = new ApolloConfig(env, appId, aplloMetaUrl, namespace);
            prop = new Properties(); 
            prop.put("key1", confi.get("key1"));
            prop.put("key2", confi.get("key2"));
            setup = true; 
            LOGGER.info("done setup remote properties..."); 
        } catch (Exception e) { 
            LOGGER.error("caught setup exception...", e); 
        } 
    } 

    public static String getProperty(String key){ 
        if(prop != null){ 
            return prop.getProperty(key); 
        } 
        return null; 
    } 
}

其中ApolloConfig是实现远程配置的类,key1和key2是定义在Apollo配置中心的两个键值对,可自行在Apollo配置中心进行配置。

最后,调用AppConfig.getProperty("key1")即可获取配置中心的相应参数值。

2.2 Archaius配置方式

Archaius是Netflix公司推出的一个开源项目。它提供了一个动态的、跨语言的、基于线程安全的配置API和一组基础配置。在Hystrix中,Archaius作为一种导致配置变化的工具。

示例二

为了演示Archaius配置方式,我们可以创建一个简单的应用程序,在POM文件中添加以下依赖:

<dependency>
      <groupId>com.netflix.archaius</groupId>
      <artifactId>archaius-core</artifactId>
      <version>0.7.3</version>
</dependency>

其次,将下面代码添加到应用程序中:

public class AppConfig {

    private volatile static Config config;
    /**
     * 初始化配置文件信息
     * @return
     */
    @SuppressWarnings("rawtypes")
    private static Config init(){
        ConcurrentMap<String, Object> keyValueProperties = new ConcurrentHashMap<String, Object>();
        keyValueProperties.put("name", "zhangsan");
        keyValueProperties.put("age",29);
        ArchaiusConfigurationSource source = new ArchaiusConfigurationSource() {

            @Override
            public void reload() throws Exception {

            }

            @Override
            public Map<String, Object> getProperties() throws Exception {
                return keyValueProperties;
            }
        };
        return new DynamicConfiguration(source, new FixedDelayPollingScheduler(1000, 1000, true));
    }

    /*获取配置指定的参数值*/
    public static <T> T getConfigurationByKey(String key,Class<T> type){
        if (config == null){
            synchronized (AppConfig.class){
                if (config == null){
                    config = init();
                }
            }
        }
        return config.get(key,type);
    }

}

最后,在主程序中调用AppConfig.getConfigurationByKey("name", String.class)即可获取相应参数名的值。

3. Apollo与Archaius的对比分析

Apollo和Archaius是两种Hystrix配置方式的优秀实现。Apollo是携程开始的开源项目,是专为应用程序的动态配置而设计的;Archaius是Netflix推出的开源项目,是专为基础配置而设计的。

与Archaius相比,Apollo配置方式具有明显的优势。

首先,Apollo支持更多的数据格式,例如Properties、XML、JSON、YAML等,而Archaius仅支持Properties。这给布置带来的便利。

其次,Apollo从多个方面改善了依赖库的质量。它支持多环境,有对权限管理的支持,并且支持灰度发布。而在Archaius中,这些改进都没有实现。

最后,Apollo的操作相比较而言,更加简洁。每次更新都是一次新的变化,更新后所有的订阅都会得到通知。而Archaius操作相对复杂,需要频繁调用订阅方法。

综上所述,Apollo相较于Archaius具有更广泛的适用性和更好的运行性能。

以上就是“hystrix配置中Apollo与Archaius对比分析”的完整攻略,希望对你有帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:hystrix配置中Apollo与Archaius对比分析 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • 部署Java在服务器端的EJB组件的方法

    下面我将详细讲解如何部署Java在服务器端的EJB组件。 什么是EJB组件 EJB是一个JavaEE的框架,可以让Java应用程序分布式运行。EJB组件是一组特殊的Java类,被装配成JavaEE应用程序,在容器中运行。 准备工作 在部署EJB组件之前,需要确定以下几点: 首先需要有一个JavaEE应用程序,可以使用Maven或Gradle构建 确认应用程序…

    Java 2023年5月26日
    00
  • Java synchronized底层的实现原理

    Java中的synchronized关键字是一种用来控制多线程同时访问共享资源的机制,通过synchronized关键字的应用可以保证同一时刻只有一个线程执行某个方法或代码块。 synchronized的锁定对象可以是普通对象,但需要注意的是,synchronized作用在对象上时,不同的对象之间互不影响,一个对象的锁与另一个对象的锁是互相独立的。下面来详细…

    Java 2023年5月26日
    00
  • Java开发学习之Bean的生命周期详解

    Java开发学习之Bean的生命周期详解 什么是Bean 在Java中,一个Java类如果被添加了特殊的注解,就可以被称为一个Bean,而这个类的实例就是一个实例化的Bean。 Bean是Java语言中一种特殊的类,是一个组件,含有规范的属性和行为,并且可以通过接口来定义。 Bean的生命周期 在Java中,Bean的生命周期从创建、初始化、使用到销毁,可以…

    Java 2023年5月20日
    00
  • Spring Security 自定义资源服务器实践过程

    下面我为你详细讲解“Spring Security 自定义资源服务器实践过程”的完整攻略。 前言 Spring Security 是一款非常流行的安全框架,可以帮助我们管理应用程序中的用户认证、授权、攻击防护等方面的安全问题。其中,Spring Security 的资源服务器模块可以帮助我们提供对受保护资源的安全访问控制机制,本文就是围绕如何自定义资源服务器…

    Java 2023年6月3日
    00
  • Java遍历起止日期中间的所有日期操作

    下面是Java遍历起止日期中间的所有日期的完整攻略: 前置条件 在使用Java进行日期遍历之前,首先需要使用Java提供的LocalDate类来表示起止日期。 LocalDate startDate = LocalDate.of(2021, 5, 1); LocalDate endDate = LocalDate.of(2021, 5, 10); 上面的代码…

    Java 2023年5月20日
    00
  • Java Spring Boot实战练习之单元测试篇

    以下是”Java Spring Boot实战练习之单元测试篇”的完整攻略,包含了步骤和示例。 1. 什么是单元测试 单元测试是一种测试方法,它用于测试整个系统或应用程序的一个单独模块或方法。单元测试是一种自动化测试方法,它能够验证代码、避免错误和缺陷,并将问题隔离到特定的代码块层面上。 2. 创建一个Spring Boot项目 在开始单元测试之前,需要先创建…

    Java 2023年5月19日
    00
  • 利用Jasypt如何对Spring Boot配置文件加密

    利用Jasypt对Spring Boot配置文件加密的步骤如下: 1. 引入Jasypt依赖 首先在项目的pom.xml文件中引入Jasypt的依赖: <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spri…

    Java 2023年5月20日
    00
  • springboot 使用Spring Boot Actuator监控应用小结

    下面是对“springboot使用SpringBootActuator监控应用小结”的详细讲解,包含完整的攻略和示例。 1. 什么是SpringBootActuator SpringBootActuator是SpringBoot框架下的一个辅助工具,可以帮助开发者更好的管理和监控应用程序的运行情况。通过向应用程序的运行时环境中添加各种监控指标,开发者可以实时…

    Java 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部