SpringCloud微服务组件——Config快速入门

Config

Config的作用

  • 为项目的配置文件提供一个统一的管理中心
  • 更方便的去维护配置文件信息
  • 给配置文件增加权限信息,更加安全
  • 在不重启项目的前提下,动态的修改配置文件并生效
搭建ConfigServer

准备Git仓库,添加文件作为Search模块的配置文件(项目名-环境名.yml)
创建ConfigServer项目
导入依赖

<dependencies>
<dependency>
   <groupId>org.springframework.cloudgroupId>
   <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
<dependency>
   <groupId>org.springframework.cloudgroupId>
   <artifactId>spring-cloud-config-serverartifactId>
dependency>
dependencies>

在启动类添加注解

@EnableConfigServer

编写配置文件

spring:
 cloud:
  config:
   server:
    git:
     uri: http://:8087/402424668/config-repo.git  # 指定git仓库地址
     username: 402424668     # 公开项目可以省略
     password: 402424668     # 公开项目可以省略
     basedir: D:\\basedir    # 指定本地仓库地址,也可以省略

启动项目访问配置文件信息
http://ip:port/Git分支/项目名-环境名.yml

搭建ConfigClient服务

导入依赖

<dependency>
   <groupId>org.springframework.cloudgroupId>
   <artifactId>spring-cloud-starter-configartifactId>
dependency>
  • 将application.yml修改为bootstrap.yml(因为SpringBoot工程会先加载bootstrap.yml,再加载application.yml,我们需要再加载application.yml之前,就去Configserver拉取到需要加载的配置信息)
  • 编写bootstrap.yml:
    ConfigClient会去ConfigServer拉取 branch/服务名-profile.yml
# 指定服务名称
   spring.appication.name=服务名
# 指定profile和branch
   spring.cloud.config.profile=dev			# 指定profile名称
   spring.cloud.config.label=master       # 指定branch名称(默认为master)
# 指定Eureka的注册信息地址(找到ConfigServer的地址,通过Eureka)
    eureka.client.service-url.defaultZone=http://localhost:8761/eureka
# 指定开关和configserver服务的名称
# 开启configclient(默认是falses)
    spring.cloud.config.discovery.enable=true
# 指定confingserver服务的名称(默认confingserver)
     spring.cloud.config.discovery.service-id=confingserver 
实现动态配置
  • 当Gitlab上的配置文件修改之后,ConfigServer会自动同步。
  • 当Gitlab上的配置文件修改之后,我希望ConfigServer可以基于bus消息总线给其他所有服务发送一个消息,通知其他服务,配置文件有变化,动态更新一下。
  • 通过acturtor提供的一个请求路径 http://ip:port/acturtor/bus-refresh
  • 其他服务就可以通过bus消息总线接收到发送过来的消息,动态更新。
    Ps:需要使用到动态更新配置的位置中,添加@RefreshScope注解,否则无效
    导入依赖
<dependency>
   <groupId>org.springframework.cloudgroupId>
   <artifactId>spring-cloud-starter-bus-amqpartifactId>
dependency>

编写配置文件连接RabbitMQ信息

spring:
 rabbitmq:
   host: 192.168.199.109
   port: 5672
   username: test
   password: test
   virtual-host: /test

实现手动刷新

导入依赖

<dependency>
   <groupId>org.springframework.bootgroupId>
   <artifactId>spring-boot-starter-actuatorartifactId>
dependency>

编写配置文件

management:
 endpoints:
   web:
     exposure:
       include: "*">

为customer添加一个controller

@RestController
@RefreshScope //必须要加
public class CustomerController {

   @Value("${env}")
   private String env;

   @GetMapping("/env")
   public String env(){
       return env;
   }
}

测试

  • CONFIG在Gitee修改之后,自动拉取最新的配置信息。
  • 其他模块需要更新的话,手动发送一个请求http://ip:port/actuator/bus-refresh,不重启项目,即可获取最新的配置信息
    实现自动动态刷新
  • 需要在Gitlab的配置文件发生改变后,由Gitlab发送请求给ConfigServer
    • GitLab发送请求给ConfigServer需要通过外网.
      • 准备内网穿透:natapp(一定要映射上你ConfigServer端口)
    • 配置GitLab,在配置文件改变后发送请求
      • 项目对应的Settings -> Integrations -> 配置访问的url路径 -> 保存。
    • 在GitLab发送请求后,会报一个400的错误。
      • 在ConfigServer中添加过滤器,处理请求体中的参数。

你可能感兴趣的:(springcloud,Java,Config)