Apollo与Zuul整合学习

本文档详细介绍了Apollo配置中心与Zuul网关的整合过程,包括Apollo的部署与配置、Zuul如何连接Apollo、指定工作环境、读取配置及动态刷新配置的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Apollo与Zuul整合的几点简单记录

 

Apollo部署安装

    部署安装参考gihub的官方教程就可以了,比较详细,附上链接QuickStart,这里记录几个主要步骤:

1.下载apollo项目

2.安装mysql

3.初始化数据库,初始化sql在apollo项目的mysql目录,有两个,分别对应ApolloPortalDB和ApolloConfigDB,两个都要初始化

4.编辑项目中的demo.sh文件,添加数据库配置,下面是默认的配置,如果跟实际不一样按实际修改

#apollo config db info
apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=用户名
apollo_config_db_password=密码(如果没有密码,留空即可)

# apollo portal db info
apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=用户名
apollo_portal_db_password=密码(如果没有密码,留空即可)

5.启动服务,在项目的目录下执行下面的命令,注意这里要留意对应的接口是否被占用,apollo默认有3个接口,8070、8080、8090,其中8070是apllo管理后台,8080是内置的eureka服务,8090是adminservice的,启动需要一点时间,大概几分钟

./demo.sh start

这时成功启动的提示,如果失败可以查看日志,日志在/service/apollo-service.log

可以通过访问8080端口查看apollo启动的服务

到这里Apollo就启动成功了,接下来可以访问8070端口进入Apollo的管理后台管理我们的项目配置

 

zuul配置Apollo参数

在zuul的bootstrap.yml中加入以下配置,连接到Apollo服务器

apollo:
  #configservice的服务器地址,默认是8080端口
  meta: http://localhost:8080
  bootstrap:
    enabled: true
    #需要加载的配置
    namespaces: application
  #@value的自动更新
  autoUpdateInjectedSpringProperties: true

      zuul启动的时候会根据上面的配置从Apollo服务器中加载,如果配置都正确的话,可以看到控制台会输出appid,当前的环境,连接到的Apollo服务器地址,在这里可以检查自己的配置是否正确。

    这里注意一个坑,namespace的命名问题,Apollo默认只支持properties方式的namespace命名方式,即用.来分割,如下图有两个namespace分别是eureka-zuul-app和eureka.zuul.app,在启动的时候由于eureka-zuul-app的命名问题会读取不到,而eureka.zuul.app是可以成功读取的,这里要注意!

 

指定工作环境

Apollo支持多种环境,可以根据应用的环境读取不同环境的配置文件,官方提供了三种方法来设置

  • DEV
    • Development environment
  • FAT
    • Feature Acceptance Test environment
  • UAT
    • User Acceptance Test environment
  • PRO
    • Production environment

工作环境如果没有指定成功,zuul启动的时候会提示Environment is set to null,需要按照提示设置变量,这里是通过第一种方式配置的

 

zuul读取Apollo配置

大体分为两种方式获取配置,通过@Value和配置类方式获取,@Value跟平常用法一样,没有什么区别,但是可以指定默认值,主要提一下配置类方式:

主要两个注入@Configuration -- 注入到spring的配置中,@EnableApolloConfig -- 开启从Apollo获取配置

@Configuration
@EnableApolloConfig
public class ApolloConfig {
    @ConfigurationProperties("zuul")
    public ZuulProperties zuulProperties(){
        return new ZuulProperties();
    }
}

 

zuul实时动态刷新配置

    实际开发中,一般会使用@ConfigurationProperties获取配置,但是默认情况下Apollo并不会自动刷新这种方式的配置,上面的Apollo的配置参数中有一个参数autoUpdateInjectedSpringProperties是开启自动刷新配置的,但是这个参数只对@Value方式获取配置有效,对于@ConfigurationProperties来获取配置的不会生效,需要实现一个监听器来自动刷新。

    Apollo的官方文档中有提到@ApolloConfigChangeListener注解,这个注解就代表Apollo配置更新监听器,当Apollo的配置更新发布之后,就会触发这个注解修饰的方法,但是官方文档并没有给出这个方法的实现,下面是从网上搜集的一种实现方式,通过实现applicationContextAware发布事件更新修改了的配置参数,亲测可用!

@Component
public class ApolloConfigChange implements ApplicationContextAware {


    private ApplicationContext applicationContext;

    @ApolloConfigChangeListener
    private void someChangeHandler(ConfigChangeEvent changeEvent) {
        for (String key : changeEvent.changedKeys()) {
            ConfigChange change = changeEvent.getChange(key);
            System.out.println("Found change - "+change.toString());
        }
        // 更新相应的bean的属性值,主要是存在@ConfigurationProperties注解的bean
        this.applicationContext.publishEvent(new EnvironmentChangeEvent(changeEvent.changedKeys()));
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值