1. 程式人生 > 其它 >Apollo客戶端接入

Apollo客戶端接入

apollo是一個攜程的配置中心,本身是叢集化,和註冊中心eureka整合。

參考文章:https://www.cnblogs.com/niejunlei/p/12502020.html

引入pom.xml:

<dependency>
        <groupId>com.ctrip.framework.apollo</groupId>
        <artifactId>apollo-client</artifactId>
        <version>1.4.0</version>
    </dependency>

在 spring中構建apollo的啟動配置。

@EnableApolloConfig(order=1)
@Configuration
public AppConfiguration{}

在META-INF下建立app.properties(也可以將以下資訊配置在application.properties中,需要在@EnableApolloConfig配置屬性檔案讀取地方)

app.id=dts-service
apollo.meta=http://127.0.0.1:8080

其中 meta 中的地址並非apollo的console介面(預設8070)的配置地址,而是eureka(8080)地址,apollo叢集通過配置中心進行叢集。

要不然會出錯,拽取不到資料。 java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $

通過Meta server可以看到。需要管理員賬號才可以。預設是8080

apollo會將配置資訊拉入本地的預設地址地方。 c:\opt\data\[appId]\config-cache\[appId]+default+application.properties

apollo 可以為其配置環境地址env,預設地址是:/opt/settings/server.properties key-value

env value可以為dev,fat,uat,pro

灰度釋出:

apollo的專案中可支援灰度釋出,灰度釋出通過指定IP將部分配置用在灰度機子上,灰度ok後,考慮是放棄還是覆蓋生產。

例項列表:

點選專案進入,可看到例項列表,就知道應用是否已經關聯到當前apollo上。

在啟動配置中新增:

@EnableApolloConfig

在屬性檔案中設定:

logging.config=classpath:logback.xml

log日誌動態對接apollo:

 * @author DennyZhao(20023137)
 * @date 2021/2/4
 */
@Configuration
public class ApolloConfiguration {

    private static final Logger logger = LoggerFactory.getLogger(ApolloConfiguration.class);

    private static final String LOG_NAME = "logging.level.root";

    @ApolloConfig
    private Config config;

    @Autowired
    private LoggingSystem loggingSystem;

    @ApolloConfigChangeListener
    private void onChange(ConfigChangeEvent changeEvent) {
        String level = config.getProperty(LOG_NAME, "INFO");
        loggingSystem.setLogLevel("root", LogLevel.valueOf(level));
        logger.warn("apollo changed..logging.root.level:{}", level);
    }
}

靜態接入方式:

 Config config = ConfigService.getAppConfig();
        ConfigChangeListener listener = new ConfigChangeListener() {
                @Override
                public void onChange(ConfigChangeEvent configChangeEvent) {
                    System.out.println("-------configEvent");
                    configChangeEvent.changedKeys();
                }
            };
            config.addChangeListener(listener);
        }

由於有的配置項會優先從@ConditionalOnProperties(***),這樣apollo的配置啟動滯後於屬性獲取。這時候就要寫屬性檔案新增:

apollo.bootstrap.enabled = true   //啟動
#apollo.bootstrap.eagerLoad.enabled = true //在日誌前載入,可對日誌級別進行啟動時管控

對於以下方式注入的屬性,apollo無法重新整理,需要在監聽器配合spring的listener監聽器,refresh EnvironmentEvent。
@ConfigurationProperties(prefix = "test.metrics")
對於屬性中是Map級別的,也無能為力修改重新整理,要注意。