1. 程式人生 > >Apollo入門教程(Windows)

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。