上云无忧 > 文档中心 > 百度智能云云原生微服务应用平台配置中心接入
云原生微服务应用平台
百度智能云云原生微服务应用平台配置中心接入

文档简介:
准备工作: 开发环境中下载 Maven 并完成环境配置。 开发环境中安装 JDK 1.8 并完成环境配置(目前项目仅支持 1.8)。 创建 demo 服务: 1. 创建 config-demo 工程: 创建一个 Maven 工程,命名为 config-demo,JDK 选择 1.8 版本。 2. 修改 pom 文件,添加 Spring Cloud 和配置中心客户端依赖。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

配置中心接入

准备工作

  • 开发环境中下载 Maven 并完成环境配置。
  • 开发环境中安装 JDK 1.8 并完成环境配置(目前项目仅支持 1.8)。

创建 demo 服务

1. 创建 config-demo 工程

创建一个 Maven 工程,命名为 config-demo,JDK 选择 1.8 版本。

2. 修改 pom 文件,添加 Spring Cloud 和配置中心客户端依赖

微服务支持 Spring boot 2.0.7.REALEASE 及以上版本和S pring Cloud Finchley.SR2 及以上版本。 这里以 Spring boot 2.0.7.REALEASE 和 Spring Cloud Finchley.SR2 为例。

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent<
/artifactId> <version>2.0.7.RELEASE</version> <relativePath/> </parent> <dependencyManagement> 
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies<
/artifactId> <version>Finchley.SR2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> 
</dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--本地开发不需要此依赖--> <dependency>
 <groupId>com.baidubce.formula</groupId> <artifactId>env-core-spring-boot-starter</artifactId> 
<version>${env-core-version}</version> </dependency> <dependency> <groupId>com.baidubce.formula
</groupId> <artifactId>consul-config-spring-boot-starter</artifactId> <version>${consul-config-version}
</version> </dependency> </dependencies>

${env-core-version} 与 ${consul-config-version} 为版本号,可自行从公共 Maven 仓库中查找使用最新版本。

3. 创建配置类,添加 @ConfigurationProperties 注解

热更新会对两类 Bean 进行刷新,一种是使用了 @ConfigurationProperties 的对象,另一类是使用了 @RefreshScope 的对象。两者的更新机制也不同,前者注释的 bean 通过重新绑定来完成刷新;后者是通过 RefreshScope 的缓存和延迟加载机制,摧毁旧对象,生成新对象。用户可以根据平时使用习惯或者具体场景,选择其一或者同时选择使用。本文将以 @ConfigurationProperties 为例,也是 Spring Cloud 官方推荐的动态配置使用方式。

另外,@Value 注释的属性在启动时也可以从配置中心获取配置值,但是该注解不能做到配置热更新。

@ConfigurationProperties(prefix = "test") public class TestProperties { private String k0;
 private String k1; private String k2; // getters and setters }

4. 创建简单的 Controller,包含一个获取配置类值的方法。

@RestController @EnableConfigurationProperties(TestProperties.class) public class EchoController 
{ @Autowired private TestProperties testProperties; @GetMapping("/getProperties") public ResponseEntity<Object>
 getConfigFromProperty() { return new ResponseEntity<>(testProperties, HttpStatus.OK); } }

@EnableConfigurationProperties 与 @ConfigurationProperties 搭配使用。 @EnableConfigurationProperties(TestProperties.class) 也可注释在配置类或者启动类中。

5. 配置application.properties配置文件

在application.properties中添加如下配置,用于将服务注册到注册中心中。

# 服务名称 spring.application.name=config-demo server.port=8888 # 配置类参数默认值 test.k0=0 test.k1=0 test.k2=0

说明:配置类参数默认值中的 test 为配置类的 prefix,建议为所有配置类参数在配置文件中设置默认值,这样在配置中心管理端删除相对应的配置时,应用程序将会恢复使用默认值,而不是停留在未删除的状态。

6. CNAP平台部署

6.1. 制作镜像

参考镜像制作文档

6.2. 使用 CNAP 平台进行部署

请参考 CNAP 操作指南中的应用托管部分。

6.3. 创建配置并进行验证

请参考 CNAP 操作指南微服务配置管理部分创建配置组。

通过为部署组创建的访问入口,调用 config-demo 应用的接口,观察返回值是否为创建的对应配置组的值(如创建多个作用域下的多个配置组,观察配置值是否按照优先级生效):

http://{ip}:{port}/getProperties。

本地开发与调试

1. 启动本地 Consul Server

  • 根据开发机系统选择下载对应 Consul 启动包

    • 官网下载地址
    • 百度云下载地址
  • 参照 Consul 使用指南安装: https://learn.hashicorp.com/consul/getting-started/install
  • 启动 Consul Agent:https://learn.hashicorp.com/consul/getting-started/agent

    • 以开发模式启动:consul agent -dev (快速测试推荐方式)
    • 持久化模式启动:consul agent -server -bootstrap-expect 1 -data-dir=/usr/local/consul/data/ -config-dir=/usr/local/consul/consul.d/
  • 访问 http://localhost:8500/ui/dc1/kv , 点击 Create, 在 Key or folder 中输入 config/ , 然后点击 Save 保存; 成功后,点击进入 config 目录, 以同样的方式创建二级目录 default、三级目录 msc-1 (任意字符与数字组合)、四级目录 full,在四级目录 full 下面创建 key:kvs。

    • 根据测试需要,可以在 key:kvs 对应的 value 里面输入 demo 应用相应的 Key/Value,以分号 ';' 作为分隔符。
    • 例如: test.k1=v1;test.k2=v2;test.k3=v3
    • 注意,上面 value 里面的 'test' 是程序中 @ConfigurationProperties 注解指定的 'prefix' 值。

2. 补充 bootstrap.properties 配置文件

在 bootstrap.properties(或 bootstrap.yml)中添加如下配置:

# 本地开发不支持consul访问token授权 spring.cloud.consul.config.token-enabled=false # 以下均为默认配置,
可根据实际测试需求调整: spring.cloud.consul.host=localhost spring.cloud.consul.port=8500 
# default to true, set false to disable all consul config func. spring.cloud.consul.config.enabled=true 
# default to true, set false to disable watch config change (disable hot update). spring.cloud.consul.
config.watch.enabled=true # default to 'config', this is the first directory. spring.cloud.consul.
config.prefix=config # default value is 'default', this is one of the second directory, 
but with lowest priority. spring.cloud.consul.config.default-context=default

若上一步的 Consul Server 是在本机启动,只需添加第一行配置即可快速启动测试:spring.cloud.consul.config.token-enabled=false

建议用户将以上配置添加在 bootstrap-local.properties 文件中,并在本地启动时指定 profiles 为 local,这样即可做到本地配置与线上配置互相隔离,每次本地开发测试也不用重复添加删除以上配置。

3. 更新 Maven 依赖

因本地开发,无需平台相关环境变量依赖,需要注释掉在创建 demo 服务步骤中添加的env-core-spring-boot-starter 依赖。

4. 本地 IDE 中启动

执行 config-demo 的 main 方法进行启动。

正常场景中程序会启动完毕,如遇到启动出错情况,建议在程序启动参数 Program arguement 中增加如下参数,用于打印更详细的输出信息:--logging.level.root=debug

5. FatJar 启动

5.1. maven 中配置打包插件

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

5.2. 打包 FatJar 文件

在 config-demo 的工程主路径下,使用 mvn clean package 进行打包,将在 target 目录下生成可执行的jar文件。

5.3. 通过 java 命令执行 FatJar

进入部署的 K8S POD 中,执行如下命令:java -jar config-demo-1.0-SNAPSHOT.jar

6. 服务验证

调用以下接口,观察调用返回是否为 Consul Server 中配置的值:http://localhost:8888/getProperties;

更新配置值,如:test.k1 = v1.1,再次调用该接口,观察返回值是否更新为最新配置值;

从 Consul Server 中删除对应的配置,如:test.k0,再次调用该接口,观察返回值是否更新为文件配置中的默认值。

微服务配置中心原理

微服务配置中心从架构上分为:客户端、服务端和管理端。

客户端由用户应用与配置中心SDK组成,配置在客户端生效。客户端在项目启动之初,向服务端发起短连接请求,用于拉取初始化配置。如果客户端开启了热更新功能(spring.cloud.consul.config.watch.enabled=true), 则客户端会在项目启动之后,向服务端发起长连接请求,用于监听配置变更。配置变更后,配置将在客户端准实时生效(生效时间 < 1s)。

配置热更新机制基于 Spring Cloud 框架实现,当前版本仅支持 @ConfigurationProperties 与 @RefreshScope 注解。

本地开发中启动的 Consul Server 即为服务端,提供配置KV存储,并且处理客户端发起的请求。

CNAP 平台提供了高可用高性能的 Consul Server 集群作为服务端,并且基于 PaaS 平台与环境以及配置中心提供的一系列高级功能,提供了配置中心管理端 UI。基于配置中心管理端,可以配置不同优先级的配置组,优先级生效顺序为:部署组 > 环境 > 应用 > 工作空间。

注意:若为相同作用域上线了多个配置组,例如 msc-1 与 msc-2 的作用域均为部署组,生效对象均为 部署组 = dg-1,且这两个配置组中的配置 key 有重复,则不能保证哪个配置组的 key 生效。因此,建议用户对配置组进行分类,一个配置组放一类配置,避免同作用域下配置组的 key 重复。

相似文档
  • 准备工作: 服务网格(Service Mesh)是致力于解决服务间通讯的基础设施层,用于处理服务间通讯。Service Mesh 通常是通过一组轻量级网络代理(Sidecar proxy),与应用程序代码部署在一起来实现,而无需感知应用程序本身。
  • 轻量级注册中心主要为开发者提供本地轻量级注册中心服务,为开发者提供在开发、联调、测试阶段的服务注册、发现等功能; 前提条件: 在使用轻量级注册中心前,请确保: 环境安装JDK1.8并完成环境配置; 确保端口8600、8500、8301、8302和8300端口未被占用;
  • 百度智能云容器引擎(Cloud Container Engine,即CCE)是高度可扩展的高性能容器管理服务,您可以在托管的云服务器实例集群上轻松运行应用程序。使用该服务,您将无需安装、运维、扩展您的集群管理基础设施,只需进行简单的API调用,便可启动和停止Docker应用程序,查询集群的完整状态,以及使用各种云服务。您可以根据您的资源需求和可用性要求在您的集群中部署容器,满足业务或应用程序的特定要求。
  • 2021-08:增加 Namespace 资源限制说明。集群管理员可以通过 Resource Quota 及 LimitRange 为每个租户设置资源限额。 2021-07:新增VPC-CNI模式下容器网段空间耗尽时的扩容方案。VPC-CNI 模式下,容器的 IP 来自 VPC 中的子网。随着集群规模扩大,ENI 子网中的 IP 可能耗尽,利用 CNI 提供的动态配置功能,可以给集群增加新的 ENI 子网。
  • 为优化控制台交互体验,控制台应用管理相关功能(工作负载、流量接入、存储配置、监控日志等)将以集群为中心进行菜单位置调整,原先菜单移至单集群管理页面(即集群详情内),让管理工作更加简单、流畅、聚焦。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部