Apollo入门教程(Windows)

简介

Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

本地快速部署

  1. 下载安装包https://github.com/nobodyiam/apollo-build-scripts
  2. 根据根目录sql文件夹下的脚本在mysql5.6+数据库新建ApolloConfigDB和ApolloPortalDB数据库
  3. 启动根目录下demo.sh文件
    image
  4. 访问http://localhost:8070,输入用户名/密码(apollo/admin)登录
    image

Java客户端接入

  1. 配置AppId和Apollo Meta Server:在resources\META-INF\目录下新建app.properties文件,相应地在apollo控制台(http://localhost:8070/)中新建项目beidao。
# test
app.id=beidao
apollo.meta=http://localhost:8080
#apollo.autoUpdateInjectedSpringProperties=false
  1. spring引入apollo的namespace:在resources\META-INF\spring目录下新建文件spring-apollo.xml,内容如下,并把此文件放入spring上下文中加载,相应地在apollo控制台beidao项目中新建namesapce TEST1.bd和 TEST1.bd1
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:apollo="http://www.ctrip.com/schema/apollo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
       http://www.ctrip.com/schema/apollo http://www.ctrip.com/schema/apollo.xsd">
    <!-- 这个是最简单的配置形式,一般应用用这种形式就可以了,用来指示Apollo注入application namespace的配置到Spring环境中 -->
    <apollo:config order="1"/>
    <!-- 这个是稍微复杂一些的配置形式,指示Apollo注入TEST1.bd和TEST2.bd namespace的配置到Spring环境中,其中TEST1.bd优先级高于TEST1.bd1 -->
    <apollo:config namespaces="TEST1.bd,TEST1.bd1" order="2"/> 
    
    <bean class="com.lvba.customer.apollo.controller.ApolloTestBean">
    	<property name="username" value="${username:xxx}"/>
        <property name="password" value="${password:xxx}"/>
    </bean>

    <context:annotation-config />
</beans>
  1. 注解:可以用@Value取引入的所有namespace中设置的值,如果有多个namespace存在同一key,则取优先级最高的namespace中的值,如namespace中均不存在且本地系统参数(系统环境变量设置)中存在此key,则取本地系统参数值。
@Value("${username:xxx}")
	String username;

也可以用@ApolloConfig引入单个namespace,所有默认的namespace名称均为application

@ApolloConfig
	private Config config; //inject config for namespace application

此时namespace取值方式如下

config.getProperty("username", "xxx");
  1. apollo还可以对namespace加监听器
//config change listener for namespace application
	  @ApolloConfigChangeListener
	  private void someOnChange(ConfigChangeEvent changeEvent) {
		  ConfigChangeListener changeListener = new ConfigChangeListener() {
		      public void onChange(ConfigChangeEvent changeEvent) {
		        logger.info("Changes for namespace {}", changeEvent.getNamespace());
		        for (String key : changeEvent.changedKeys()) {
		          ConfigChange change = changeEvent.getChange(key);
		          logger.info("Change - key: {}, oldValue: {}, newValue: {}, changeType: {}",
		              change.getPropertyName(), change.getOldValue(), change.getNewValue(),
		              change.getChangeType());
		        }
		      }
		    };
		    config.addChangeListener(changeListener);
	  }
  1. 访问效果:启动dubbo service和web工程,访问页面http://localhost:8085/apollo/test(可在http://localhost:8070/config.html?#/appid=beidao控制台修改key对应的value值,再刷新此页面,相应key对应的value值会实时变化)。
注解方式
用户名: apollo1111
密码: hello
xml方式
用户名: apollo1111
密码: hello
config取值
用户名: apollo1111
密码: hello
namespace verify:
x:0

说明:这里引入apollo的工程是我自己建的一个dubbo+spring mvc工程,代码细节部分请参考github源码:https://github.com/MAXAmbitious/lvba

总结

这篇文章只是apollo入门教程,写的比较仓促,有不理解的地方欢迎沟通交流,关于apollo更详尽的内容请参阅官网https://github.com/ctripcorp/apollo/wiki。

猜你喜欢

转载自blog.csdn.net/qq_30051265/article/details/82854531
今日推荐