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读取文件流,设置浏览器下载或直接预览操作

    让我来详细讲解如何使用Java读取文件流并设置浏览器下载或直接预览操作。 1. 读取文件流 Java读取文件流可以使用java.io包中的FileInputStream类。该类提供了多种读取文件流的方式。 示例1:直接读取文件流 import java.io.File; import java.io.FileInputStream; import java.…

    Java 2023年5月19日
    00
  • Java异常–常见方法–自定义异常–增强try(try-with-resources)详解

    Java异常–常见方法–自定义异常–增强try(try-with-resources)详解 Java异常 在 Java 中,运行期的错误被称之为异常(Exception)。在 Java 中,所有异常都是 java.lang.Throwable 类或其子类的实例。异常分为两种类型:检查型异常和非检查型异常(运行时异常)。 检查型异常:需要在代码中显式处理…

    Java 2023年5月27日
    00
  • SpringMVC上传文件FileUpload使用方法详解

    下面是详细讲解“SpringMVC上传文件FileUpload使用方法详解”的完整攻略: 什么是SpringMVC文件上传? SpringMVC文件上传就是通过SpringMVC框架提供的功能,实现将文件从客户端传输到服务器端并存储到指定位置的过程。文件上传是Web应用程序经常使用的功能之一。通过SpringMVC文件上传,我们可以轻松地完成文件上传的处理,…

    Java 2023年6月15日
    00
  • 浅析SpringBoot中使用thymeleaf找不到.HTML文件的原因

    一、问题背景当我们在使用SpringBoot时,可能会出现找不到HTML文件的情况,这时候我们需要检查一下以下几个问题: 1.文件路径是否正确2.是否扫描到了对应的包3.是否使用了正确的模板引擎4.是否在配置文件中正确配置了模板引擎下面我将分别介绍每个问题,并给出相应的示例。 二、 文件路径是否正确首先,我们需要确保HTML文件在正确的位置。在SpringB…

    Java 2023年5月20日
    00
  • Java泛型最全知识总结

    Java泛型最全知识总结 什么是Java泛型? Java泛型是JDK 5之后引入的新特性,它可以让我们编写更加安全和简洁的程序。它通过参数化类型的概念来实现,可以让我们在编译期检查类型安全,避免了很多传统上容易出现的运行期异常。 泛型的基本语法 泛型语法可以分为四种:泛型类、泛型方法、泛型接口、泛型通配符。 泛型类 泛型类使用<T>或其他类型参数…

    Java 2023年5月26日
    00
  • java如何用正则表达式匹配与提取字符串

    Java中使用正则表达式匹配和提取子字符串可以通过Java标准库中的Pattern和Matcher类实现。以下是使用正则表达式进行匹配和提取的攻略: 步骤1:创建正则表达式 首先需要创建一个正则表达式来匹配和提取字符串。正则表达式是由一些特殊字符和普通字符组成的模式,用于描述要匹配的字符串的形式。例如,正则表达式\d+ 可以匹配一个或多个数字。 步骤2:编译…

    Java 2023年5月27日
    00
  • 教你一步到位部署运行MyBatis3源码(保姆级)

    教你一步到位部署运行MyBatis3源码(保姆级) 前言 MyBatis 是一个开源的免费的 Java 持久层框架,它利用简单的 XML 或注解代码来配置和映射数据库操作。 在实际的开发中,我们经常会直接使用 MyBatis 这个框架来进行数据库的操作,但有时候会需要修改或者扩展 MyBatis3 的源码来满足自己的需求,那么这时候就需要我们先将 MyBat…

    Java 2023年5月20日
    00
  • Spring Security认证提供程序示例详解

    Spring Security认证提供程序示例详解 Spring Security提供了强大的身份验证和授权功能,其基础在于认证提供程序的实现。本文将讨论Spring Security认证提供程序示例,并提供两个示例以便更好地理解该功能。 什么是Spring Security认证提供程序? Spring Security认证提供程序是一个接口,定义了如何获取…

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