配置核心作为散布式微服务开发的标配组件,业界已有很多胜利的典型利用,如:携程 Apollo 分布式配置核心、百度 Disconf 分布式配置核心等。盘古开发框架配置核心基于阿里的 Nacos 提供动静配置服务。
鉴于文档可读性,盘古教程和参考范例都应用的本地配置的形式。本文将介绍如何基于配置核心让盘古利用取得动静配置服务的能力。在理论利用中,如无非凡需要咱们个别都倡议采纳配置核心的形式来开发。
配置核心介绍
Nacos 动静配置服务能够让你以中心化、内部化和动态化的形式治理所有环境的利用配置和服务配置。动静配置打消了配置变更时重新部署利用和服务的须要,让配置管理变得更加高效和麻利。配置中心化治理让实现无状态服务变得更简略,让服务按需弹性扩大变得更容易。它还提供了一个简洁易用的 UI 帮忙你治理所有的服务和利用的配置,包含配置版本跟踪、金丝雀公布、一键回滚配置等一系列开箱即用的配置管理个性,帮忙你更平安地在生产环境中治理配置变更和升高配置变更带来的危险。
-
疾速 QA:前文中 Nacos 用于服务注册,为什么配置核心也是它?
Nacos 是构建以“服务”为核心的古代利用架构 (例如微服务范式、云原生范式) 的服务基础设施。致力于发现、配置和治理微服务,完满的整合了配置核心和服务注册核心。因而,Nacos 不仅是服务注册核心也是功能完善的分布式配置核心。
-
疾速 QA:单体分层架构的开发模式也能够应用配置核心进行配置吗?
配置核心是散布式微服务架构开发环境下强烈建议的必选标配组件。但如果你是基于单体分层架构开发,配置核心也是一样能够应用的。对于这些根底能力,无论是微服务还是单体,盘古框架都做了完满适配,只须要依赖
pangu-spring-boot-starter
就能够实现开箱即用。
相干名词解释
命名空间
用于进行租户粒度的配置隔离。不同的命名空间下,能够存在雷同的 Group 或 Data ID 的配置。Namespace 的罕用场景之一是不同环境的配置的辨别隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
配置管理
系统配置的编辑、存储、散发、变更治理、历史版本治理、变更审计等所有与配置相干的流动。
配置项
一个具体的可配置的参数与其值域,通常以 param-key=param-value 的模式存在。例如咱们常配置零碎的日志输入级别(logLevel=INFO|WARN|ERROR)就是一个配置项。
配置集
一组相干或者不相干的配置项的汇合称为配置集。在零碎中,一个配置文件通常就是一个配置集,蕴含了零碎各个方面的配置。例如,一个配置集可能蕴含了数据源、线程池、日志级别等配置项。
配置集 ID
Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。一个零碎或者利用能够蕴含多个配置集,每个配置集都能够被一个有意义的名称标识。(比方:应用利用名称作为 Data ID)
配置快照
Nacos 的客户端 SDK 会在本地生成配置的快照。当客户端无奈连贯到 Nacos Server 时,能够应用配置快照显示零碎的整体容灾能力。配置快照相似于 Git 中的本地 commit,也相似于缓存,会在适当的机会更新,然而并没有缓存过期(expiration)的概念。
本地配置与配置核心比照
-
本地配置(配置文件)
- 配置扩散、与利用耦合、动态配置
- 无环境隔离无版本反对,容易引发生产事变
- 无平安审计
-
配置核心
- 配置集中、内部化、动态化实时失效
- 多环境隔离多版本反对,较平安
- 配置权限管制、操作变更审计
配置核心实战
上面介绍一个应用配置核心的例子。其它基于本地配置的范例都能够参考这个例子改为基于配置核心的动静配置。
装置相干盘古模块
- 盘古 Parent
<parent>
<groupId>com.gitee.pulanos.pangu</groupId>
<artifactId>pangu-parent</artifactId>
<version>latest.version.xxx</version>
<relativePath/>
</parent>
- 根底模块
<dependency>
<groupId>com.gitee.pulanos.pangu</groupId>
<artifactId>pangu-spring-boot-starter</artifactId>
</dependency>
本地配置
基于配置核心的配置也是须要一个本地配置文件的,但这个配置文件是固定的模版格局。用于配置一些与配置核心进行数据通信相干的根底类参数。如下所示。
spring.application.name=pangu-examples-config-remote-nacos
spring.profiles.active=${spring.profiles.active:dev}
nacos.config.bootstrap.enable=true
nacos.config.bootstrap.log-enable=true
nacos.config.auto-refresh=true
nacos.config.namespace=${nacos.namespace:pangu-dev}
nacos.config.server-addr=${nacos.server-addr:127.0.0.1:8848}
#nacos.config.type=yaml
nacos.config.type=properties
nacos.config.data-id=${spring.application.name}
要害配置项阐明
- nacos.config.auto-refresh
配置核心的配置变更后主动刷新到配置客户端 - nacos.config.namespace
命名空间(留神是对应命名空间的 ID 值),倡议应用命名空间来辨别部署环境 - nacos.config.server-addr
配置核心通信地址 - nacos.config.type
配置核心应用的配置格局(properties、yaml 等) - nacos.config.data-id
配置核心某配置集的惟一标识
配置核心配置
在进行完上述本地配置后,咱们的利用就能和配置核心进行数据同步了。当初依据本地配置信息在配置核心创立绝对应的命名空间和同名 data-id 的配置集。
-
疾速 QA:客户端是如何与 Nacos 配置核心进行数据同步的?
客户端通过 http 长轮询机制拉取 nacos server 端的配置数据,并会在本地创立配置快照(容灾)。在长轮询的超时期待过程中,nacos server 端如果配置产生扭转,会被动将配置写入 response 并返回,模仿了“推送”成果。所以客户端能实时感知配置核心的配置变动。
创立命名空间
在 Nacos 管理系统的『命名空间』菜单新建 ID 为 pangu-dev
的命名空间(此 ID 即为上述配置项 nacos.config.namespace 的值)。如下图所示。
创立配置集
一个命名空间下能够创立多组配置集,每个配置集由 data-id 来惟一标识。在 Nacos 管理系统的『配置管理 - 配置列表』菜单新建 data-id 值为 pangu-examples-config-remote-nacos
的配置集。如下图所示。
- 配置集列表
- 新增 / 编辑配置集
启动入口
@SpringBootApplication
public class NacosConfigurationApplication {public static void main(String[] args) {PanGuApplicationBuilder.init(NacosConfigurationApplication.class).run(args);
}
}
应用配置
至此,咱们就能够在利用中应用 @NacosValue
注解来获取配置项了。如下代码所示。
/**
* 开启 autoRefreshed 配置项, 能够实现参数的动静刷新
*/
@NacosValue(value = "${demo.app.id}")
private String appId;
@NacosValue(value = "${demo.app.name}", autoRefreshed = true)
private String appName;
@NacosValue(value = "${demo.app.author}", autoRefreshed = true)
private String appAuthor;
-
疾速 QA:范例只演示了几个简略的变量参数,数据库等中间件的连贯配置信息能够放配置核心吗?
当然是能够的,干就完了。
彩蛋:基于配置核心的日志级别热切换
为了加强日志输入的可观测性,盘古根底模块实现了基于配置核心的日志级别热切换能力。只须要在配置核心批改或新增日志级别配置,则对应的日志输入级别即刻实时失效。
# 日志
logging.level.root=INFO
logging.level.com.gitee.pulanos.pangu=INFO
本文相干范例源码
- pangu-examples-config-remote-nacos:配置核心参考范例
- pangu-examples-log-dynamic:基于配置核心的日志级别热切换参考范例
下一步
持续浏览其它章节获取你想要的答案或通过咱们的 开发者社区 寻求更多帮忙。
彩蛋
- 盘古开源主页
- 盘古开发文档