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日

相关文章

  • 关于Ubuntu Server 18.04 LTS 安装Tomcat并配置systemctl管理Tomcat服务的问题

    下面是详细的攻略: 环境准备 确保已经安装了Java环境,Tomcat需要依赖Java运行 sudo apt install default-jdk 下载Tomcat 可以在官网下载Tomcat https://tomcat.apache.org/download-90.cgi。 这里以apache-tomcat-9.0.52.tar.gz为例,在终端中执行…

    Java 2023年6月2日
    00
  • 详解Java基础知识——JDBC

    详解Java基础知识——JDBC JDBC的介绍 JDBC(Java Database Connectivity)是Java语言中用于操作关系型数据库的API,通过JDBC可以实现Java与数据库之间的交互。JDBC主要包含以下几个部分: DriverManager:驱动管理器,用于管理各种数据库驱动。 Connection:连接对象,用于与数据库建立连接。…

    Java 2023年5月19日
    00
  • 常见的Java字节码操纵库有哪些?

    常见的Java字节码操纵库 Java字节码操纵库是指一些工具类库,用于在运行时动态修改Java字节码。常见的Java字节码操纵库有以下几种: ASM:是一个直接以Java字节码的形式生成、修改类的框架。它提供了一些比较底层的API,可以让开发者精细地控制字节码的生成和修改过程。 Javassist:是一个基于字节码操作的程序库,可以在运行时对字节码进行修改、…

    Java 2023年5月11日
    00
  • Java基于Base64实现编码解码图片文件

    实现Java基于Base64的编码解码图片文件可以分为以下步骤: 将待编码的图片文件读取为字节数组。 使用Base64进行编码,将字节数组转换为Base64字符串。 将Base64字符串转换为字节数组,使用Base64进行解码。 将解码后的字节数组写入文件,生成解码后的图片文件。 下面是使用Java实现基于Base64的编码解码图片文件的完整攻略: 步骤一:…

    Java 2023年5月20日
    00
  • JavaWeb开发入门第一篇必备知识讲解

    关于“JavaWeb开发入门第一篇必备知识讲解”的完整攻略,下面是详细的说明: JavaWeb开发入门第一篇必备知识讲解 什么是JavaWeb? JavaWeb是Java语言在Web应用程序领域中的应用,主要包括Servlet、JSP、Web服务等技术。JavaWeb技术架构主要是基于MVC思想,即模型(M)-视图(V)-控制器(C)。 Servlet Se…

    Java 2023年5月30日
    00
  • 网页教案,针对初学者的教案

    网页教案,针对初学者的教案 背景介绍 越来越多的人开始学习网页制作,但对于初学者来说,网页制作可能会显得困难和复杂。因此,为初学者提供一份全面的、详细的网页教案是非常必要的。 教案具体内容 第一部分:HTML基础 在这一部分中,我们将介绍基础的HTML标签和语法。主要包括以下内容: HTML文件结构 标题和段落标签 列表标签 链接标签 图片标签 第二部分:C…

    Java 2023年5月23日
    00
  • Java 用两个线程交替打印数字和字母

    实现Java用两个线程交替打印数字和字母的方法,有很多种。下面给出两种简单明了的方法。 方式一: 使用synchronized关键字 首先,我们定义一个共享的线程类,需要一个计数用的整数类型变量、一个布尔类型的打印数字的标记、线程的名称及一个打印方法。 public class ShareThread { private int count = 1; pri…

    Java 2023年5月26日
    00
  • IDEA-Maven项目的jdk版本设置方法

    下面就详细讲解“IDEA-Maven项目的jdk版本设置方法”的完整攻略。 第一步:确认jdk版本 首先要确认本地已经安装了需要使用的jdk版本,打开终端输入以下命令: java -version 如果显示的版本号和你需要使用的版本号一致,则可以跳过第二步。如果版本号不一致,需要安装或者设置jdk环境变量。这里不再详述。 第二步:设置项目jdk版本 2.1 …

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