Config的客户端使用

在14.2节中,我们已经搭建好一个配置中心,接下来就应该配置客户端 Client,让 Config 运行起来。因此,这一节,将会介绍如何使用 Config,并在最后介绍高可用。

配置客户端

使用以前搭建过的 consumerService 应用配置客户端。首先,需要添加依赖,依赖代码如下所示。

<dependency>
   //client端的依赖
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-config-client</artifactId>
</dependency>

然后,修改 application.properties 为 bootstrap.properties,代码如下所示。

spring.application.name=consumerService
eureka.client.service-url.defaultZone=http://localhost:8764/eureka/
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.service-id=CONFIG
spring.cloud.config.profile=dev

对上面的配置项做一些说明。首先,bootstrap 是启动项的意思,在启动文件中指明在启动之后再读取的文件。service-id 的意思是应用 ID,enabled 为启动发现启动,分支为 dev。

客户端测试

通过写控制类程序来进行测试,代码如下所示。

package com.cloudtest.eurekaconsumer.controller;
@RestController
public class ConfigTest {
   @Value("${env}")
   private String env;
   @GetMapping("/print")
   public String print(){
      return env;
   }
}

1) 测试1

先将 bootstrap.properties 中的配置项设置为 dev,配置项如下所示。

spring.cloud.config.profile=dev

然后,访问链接 http://localhost:8070/print ,如图14.14所示。

image 2024 04 01 13 07 00 833
Figure 1. 图14.14 dev效果

2) 测试2

再将 bootstrap.properties 中的配置项设置为 test,配置项如下所示。

spring.cloud.config.profile=test

然后,访问链接 http://localhost:8070/print ,如图14.15所示。

image 2024 04 01 13 08 13 780
Figure 2. 图14.15 test效果

通过两次测试,我们可以发现,只需要简单地切换就可以迅速地使用新的配置文件了,在程序开发中,简化了开发过程。

3) 测试3

下面是刚刚测试1的配置项。

spring.application.name=consumerService
eureka.client.service-url.defaultZone=http://localhost:8764/eureka/
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.service-id=CONFIG
spring.cloud.config.profile=dev

在上面可以看到,有 defaultZone 配置,如果这个配置项不写,直接放在远程 Git 中,启动项目时会报错。

因为在启动时,需要连接 Eureka,然后获取在 Eureka 上的 service-id,读取环境和应用名才能获取配置文件上的内容。所以,如果这里不写 defaultZone 就会报错,项目不能启动。但是如果不写是否一定会报错呢?其实不是。下面是不带 defaultZone 时出现的日志。

Request execution error.
endpoint=DefaultEndpoint{ serviceUrl=http://localhost:8761/eureka/}

这里说明,将会默认加载 8761 端口。如果我们的 Eureka 是默认的 8761,则可以正确地访问到配置文件。

Config的高可用性

这一小节本应该放到服务端来介绍的,但是考虑到需要在客户端进行验证,所以将 Config 的高可用放在这里进行介绍。这里的高可用部署起来比较方便。首先,将原本的应用进行复制,然后修改端口号,防止冲突,如图14.16所示。

image 2024 04 01 13 12 12 300
Figure 3. 图14.16 复制应用

在上图中,使用的应用端口号为 8097,原 Config 应用使用的端口号是 8096。然后,启动两个 Config 应用,如图14.17所示。

image 2024 04 01 13 12 48 659
Figure 4. 图14.17 两个config应用

下面进行测试。启动 consumerService 的客户端(configclient 端),可以看到日志如下。

Fetching config from server at : http://192.168.220.1:8097/

停止应用,然后重新启动,可以看到日志如下。

Fetching config from server at : http://192.168.220.1:8096/

这说明 Config 的高可用也是负载均衡的。