apollo配置中心入门实践

说明:

(如果微服务开发没有严格统一的代码开发规范,不建议采用apollo,否则只会更浪费时间在一堆配置上)

通常情况下,我们无论是但模块开发,还是微服务多模块开发,都采用springboot一个个模块,每个模块服务中都有一个一个配置文件,application.yml或者application.properties。
每个配置文件中都设置 端口号、服务名称,mysql、redis等其他一些中间件的连接信息,这样虽然方便开发,但是在正式部署的情况下,或造成一些问题:

第一:配置文件跟随jar包运行,不加密的情况下容易导致数据库和中间件账号密码等关键信息暴露
第二:服务模块大规模集群情况下,每个都有大部分相同的配置,重复配置
第三:如果需要改配置信息,需要重新部署发布应用才能生效

apollo配置可以动态更新配置,利用namespaces可以把公用配置抽取出来,如mysq密码连接方式,elasticsearch、redis、naocs、rocketmq等中间件

apollo有三个模块:

在这里插入图片描述

apollo-configservice:配置中心(默认端口8080),和springboot进行连接的配置中心,里面还包含了Eureka注册中心
apollo-adminservice:管理中心(默认端口8090)。提供配置的修改、发布等功能,服务对象是 Apollo Portal(管理界面)
apollo-portal:提供Web界面的服务(默认端口8070),启动成功后,可以打开http://localhost:8070/登录web界面,默认账号密码是apollo/admin

概念:

Apollo支持4个维度管理Key-Value格式的配置:
● application (应用),即 app.id 参数
● environment (环境)
● cluster (集群)
● namespace (命名空间)

(1)、application

● Apollo 客户端在运行时需要知道当前应用是谁,从而可以根据不同的应用来获取对应应用的配置。
● 每个应用都需要有唯一的身份标识,可以在代码中配置 app.id 参数来标识当前应用,Apollo 会根据此指来辨别当前应用。

(2)、environment

Apollo 中默认提供了四种环境:
● FAT(Feature Acceptance Test):功能测试环境
● UAT(User Acceptance Test):集成测试环境
● DEV(Develop):开发环境
● PRO(Produce):生产环境
在程序中如果想指定使用哪个环境,可以配置变量 env 的值为对应环境名称即可

(3)、cluster

● 一个应用下不同实例的分组,比如典型的可以按照数据中心分,把上海机房的应用实例分为一个集群,把北京机房的应用实例分为另一个集群。
● 对不同的集群,同一个配置可以有不一样的值,比如说上面所指的两个北京、上海两个机房设置两个集群,两个集群中都有 mysql 配置参数,其中参数中配置的地址是不一样的。

(4)、namespace

配置环境分类,比如jdbc、redis、es分为不同的名称空间,可以把它当成分组的概念,假设A服务同时间需要jdbc、redis、mq的配置,就直接在application.yml中配置多个名称空间配置即可
在这里插入图片描述
在这里插入图片描述

apollo中间件部署

需要先安装JDK1.8+ 和mysql5.7+环境,apollo的三个模块依赖他们,且需要导入apollo设计的数据库和表

参考:官方部署文档 https://www.apolloconfig.com/#/zh/deployment/quick-start

sprinboot使用:

(1)引入依赖:

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

(2)application.yml配置

app:
  id: demo_0306  # apollo配置的应用id,一般是一个平台下的所有jar包模块公用一个应用id
apollo:
  bootstrap:
    enabled: true # 启用apollo,或者在启动类上加上@EnableApolloConfig,一样的效果
    namespaces: application # apollo中配置的空间名称
  meta: http://192.168.13.21:8080  # apollo配置服务Config Services模块的连接信息,端口默认是8080

其他更多参数设置说明

#Apollo 配置
app:
  id: apollo-test                            #应用ID
apollo:
  cacheDir: /opt/data/                       #配置本地配置缓存目录,一旦配置中心失联,可以保证可用
  cluster: default                           #指定使用哪个集群的配置
  meta: http://192.168.2.11:30002            #DEV环境配置中心地址
  autoUpdateInjectedSpringProperties: true   #是否开启 Spring 参数自动更新
  bootstrap:                                
    enabled: true                            #是否开启 Apollo
    namespaces: application                  #设置 Namespace
    eagerLoad:
      enabled: false                         #将 Apollo 加载提到初始化日志系统之前

其他:

动态配置的局限:

端口号没法自动更新,就算开启了autoUpdateInjectedSpringProperties:true,也不行
除了 server.port 外,还有一些配置参数是无法通过动态更新实现的,包括但不限于:

  1. 应用程序日志级别:通常应用程序的日志级别在应用启动时已经确定,无法通过动态更新配置参数来实现实时调整日志级别。
  2. 数据库连接信息:数据库连接信息如数据库地址、用户名、密码等通常在应用启动时已经加载并建立连接,无法通过动态更新配置参数来实现实时更改数据库连接信息。
  3. 安全相关配置:涉及安全认证、权限控制等敏感配置通常在应用启动时已经加载并生效,无法通过动态更新配置参数来实现实时更改。
  4. 静态资源路径:应用程序的静态资源路径通常在应用启动时已经确定,无法通过动态更新配置参数来实现实时更改静态资源路径。
    这些配置参数一般需要在应用启动时确定,并且涉及到应用程序的核心功能或安全性,因此无法通过动态更新配置参数的方式来实现实时更改。
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值