Apollo客户端使用
引入依赖
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
</dependency>
架构图
根据架构图可以看出,在configservice中有个metaservice服务,这个服务用于给客户端和portal端获取configservice和adminservice服务列表,然后调用服务去拉取配置文件或者保存配置文件。
首先我们在项目中引入了客户端的依赖后,需要在配置文件中进行配置客户端信息,我以SpringBoot项目为例,首先在配置文件中配置app:id属性来指定应用ID,apollo:meta属性来指定获取服务列表的接口,因为Client端首先是通过MetaService去注册中心获取adminservice和configservice服务实例,然后再去拉取/更新配置信息。
上面两项配置是让客户端跑起来的核心,接下来就是在我们代码中去使用配置了,创建一个类中定义属性,可以使用@Value修饰属性实现单值绑定,也可以直接使用@ConfigurationProperties注解对类修饰,实现多值绑定。还要在启动类上使用@EnableApolloConfig注解,并且可以指定它获取哪些配置文件,可以指定多个,默认是application。
Q1:单值绑定可以实现动态刷新,多值绑定不能动态刷新?
想要实现动态刷新首先需要在配置文件中进行配置
apollo:
autoUpdateInjectedSpringProperties: true
其次就是需要创建一个监听类:
/**
* @Author xjw
* @Date: 2022/07/19 23:44:40
* @Description
*/
@Component
public class PropertiesListener implements ApplicationContextAware {
private ApplicationContext applicationContext;
@ApolloConfigChangeListener(value = {"application.yml"})
public void onChange(ConfigChangeEvent changeEvent){
// 更新相应的bean的属性值,主要是存在@ConfigurationProperties注解的bean
this.applicationContext.publishEvent(changeEvent);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}
这样就能够实现多值绑定的动态刷新了。
配置访问密钥
在portal端(门户端),我们可以生成secret,当启用生成的密钥时,当应用想要拉取配置文件,需要携带密钥,如果不携带将无法拉取。
缓存
Apollo客户端还能对拉取的配置文件通过properties文件的形式进行缓存,当configservice服务挂掉或者拉取不到文件时会从本地缓存中去获取配置信息。缓存保存的默认目录是/opt/data(Linux),我们也可以在配置文件中进行修改指定它的缓存目录,如果是通过Docker启动的同学记得要把缓存目录挂载出来,别到时候说怎么找不到。
至此,Apollo也就基本可以使用起来辣!!!