SpringCloud(十三)——统一配置中心:config

Config组件简介

spring cloud config 为微服务架构中的微服务提供集中化的外部支持,配置服务器为各个不同微服务应用的所有环节提供了一个中心化的外部配置

config(配置)又称为 统一配置中心顾名思义,就是将配置统一管理,配置统一管理的好处是在日后大规模集群部署服务应用时相同的服务配置一致,日后再修改配置只需要统一修改全部同步,不需要一个一个服务手动维护。

spring cloud config 分为服务端客户端两部分。

服务端也称为 分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密,解密信息等访问接口。

客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理。并且可用通过git客户端工具来方便的管理和访问配置内容。

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_spring cloud

spring cloud config 分布式配置中心能干嘛?
  • 集中式管理配置文件
  • 不同环境,不同配置,动态化的配置更新,分环境部署,比如 /dev /test /prod /beta /release
  • 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息
  • 当配置发生变动时,服务不需要重启,即可感知到配置的变化,并应用新的配置
  • 将配置信息以REST接口的形式暴露

环境搭建

由于spring cloud config 默认使用git来存储配置文件 (也有其他方式,比如自持SVN 和本地文件),但是最推荐的还是git ,而且使用的是 http / https 访问的形式。

1、在码云上新建仓库

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_微服务架构_02

2、选择HTTPS连接,点击复制

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_微服务架构_03

3、新建一个config-server模块springcloud-config-server-3344

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_spring cloud_04

4、添加相关依赖

<dependencies>
    <!--config server统一配置中心-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
    <!--加群1025684353一起吹水聊天-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

5、编写application.yaml配置文件

server:
  port: 3344
spring:
  application:
    name: springcloud-config-server
  # 连接码云远程仓库
  #加群1025684353一起吹水聊天-->
  cloud:
    config:
      server:
        git:
          # 注意是https的而不是ssh
          uri: https://gitee.com/luoxiao1104/springcloud-config.git
          # 通过 config-server可以连接到git,访问其中的资源以及配置~
          default-label: master

6、编写主启动类

package com.study.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication_3344 {
    public static void main(String[] args) {
    //加群1025684353一起吹水聊天-->
        SpringApplication.run(ConfigServerApplication_3344.class,args);
    }
}

7、启动主启动类测试是否成功

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_微服务架构_05

Config客户端开发-远程连接

config client :微服务

1、新建一个config客户端模块springcloud-config-client-3355

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_微服务架构_06

2、导入相关依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--加群1025684353一起吹水聊天-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>

3、编写application.yaml配置文件

server:
  port: 3355
spring:
  application:
    name: springcloud-config-client

#Eureka配置,服务注册到哪里
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
  instance:
    instance-id: springcloud-cofig-client-3355  #修改Eureka默认描述信息

#自定义一个属性
name: zhangsan

4、编写启动类

package com.study.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class ConfigClientApplication_3355 {
    public static void main(String[] args) {
    //加群1025684353一起吹水聊天-->
        SpringApplication.run(ConfigClientApplication_3355.class,args);
    }
}

5、编写conroller测试

package com.study.springcloud.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {
    private static final Logger log = LoggerFactory.getLogger(DemoController.class);

    @Value("${name}")
    private String name;
	//加群1025684353一起吹水聊天-->
    @RequestMapping("/demo")
    public String demo(){
        log.info("demo ok!!!");
        return "demo ok,name:"+name;
    }
}

访问 http://localhost:3355/demo

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_微服务_07

在项目中,配置里面的属性(如name属性)可能会根据环境(开发环境,测试环境)不同,值也是不一样的。所以我们在springboot中可以配置多套环境

1、新建开发环境application-dev.yaml

name: zhangsan-dev

2、新建测试环境application-test.yaml

name: lisi-test

3、在修改主配置文件application.yaml

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_微服务架构_08

4、重新访问 http://localhost:3355/demo

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_微服务_09

把配置文件上传到远端仓库

6、在Gitee上新建文件

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_微服务架构_10

application.yaml配置文件

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_微服务架构_11

application-dev.yaml配置文件

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_spring cloud_12

application-test.yaml配置文件

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_微服务_13

3个文件

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_java_14

7、删除项目中的所有yaml配置文件

8、启动config服务springcloud-config-client-3344

9、访问localhost:3344/configclient-dev.yaml 获取配置环境,缓存到本地

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_微服务架构_15

查看控制台输出缓存的地址

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_微服务架构_16


10、在config客户端=springcloud-config-client-3355创建bootstrap.yaml配置文件

#config server地址
spring:
  cloud:
    config:
      discovery:
        #根据集群注册中心服务器id获取config sever,不要写死,建议在集群获取
        service-id: SPRINGCLOUD-CONFIG-SERVER
        #开启当前configclient 根据服务id去注册中心获取
        enabled: true
        #获取配置文件 1、分支 2、文件名 3、环境
      label: master
      name: configclient
      profile: dev
#配置注册中心
#Eureka配置,服务注册到哪里
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
  instance:
    instance-id: springcloud-cofig-client-3355  #修改Eureka默认描述信息

11、启动测试

1、启动eureka集群springcloud-eureka-7001

2、启动config服务端springcloud-config-server-3344

3、启动config客户端springcloud-config-client-3355

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_spring_17

4、更改bootstrap.yaml配置,重启3355

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_spring cloud_18

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_spring_19

注意

config客户端配置如果使用application.yaml命名,会访问远程连接 http://localhost:8888
application.yaml命名是用于已开发完成的项目

Config手动配置刷新

当远程git仓库中配置发生变化时,不需要重启微服务就可以直接读取远端修改之后的配置信息,这种就叫做手动配置刷新

1、在controller中添加@RefreshScope注解

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_java_20

2、在bootstrap.yaml配置文件中添加 端点暴露,重启。

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_spring_21

3、修改远程配置文件

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_spring cloud_22

4、打开控制台输入curl -X POST http://localhost:3355/actuator/refresh

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_java_23

springboot整合springcloud的eurekaapollo配置中心服务调用gateway网关 springcloud配置中心详解_spring cloud_24