下面是关于“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技术站