springcloud config不重启修改配置_「从0到1学习微服务SpringCloud 06 统一配置中心Spring Cloud Config...

本文介绍了SpringCloud Config的使用,包括配置中心的作用、原理和实战操作。通过Config Server和Config Client,实现了配置文件的统一管理和实时更新,无需服务重启。配置文件存储在远程git仓库,Config Server拉取并提供给各微服务。同时讲解了手动和自动配置刷新,通过WebHooks和消息总线Spring Cloud Bus实现配置变更的即时同步。
摘要由CSDN通过智能技术生成

d61dc92d448e9ab47bd5026575dfecd9.png

系列文章(更新ing):

「 从0到1学习微服务SpringCloud 」01 一起来学呀! 「 从0到1学习微服务SpringCloud 」02 Eureka服务注册与发现 「 从0到1学习微服务SpringCloud 」03 Eureka的自我保护机制 「 从0到1学习微服务SpringCloud 」04服务消费者Ribbon+RestTemplate 「 从0到1学习微服务SpringCloud 」05消费者Fegin

是什么?

如名字一样,就是用来统一管理配置文件的组件

为什么需要它?

1.不方便维护 多人同时对配置文件进行修改,冲突不断,很难维护

2.配置内容安全和权限 主要是针对线上的配置来说,一般不对开发公开,只有运维有权限所以需要将配置文件隔离,不放到项目代码里

3.更新配置项目需要重启 每次更新配置文件都需要重启项目,很耗时。使用了配置中心后,即可实现配置实时更新

原理

579c971b34e2272fa804bcf9dd6b5aa0.png

1.配置文件存储在远端git(比如github,gitee等仓库),config-server从远端git拉取配置文件,并保存到本地git。 2.本地git和config-server的交互是双向的,因为当远端git无法访问时,会从本地git获取配置文件 3.config-client(即各个微服务),从config-server拉取配置文件

实战

RabbitMQ

项目需要配合使用RabbitMQ实现,需要先安装RabbitMQ。 公众号提供64位win安装包(公众号后台回复【rbmq】获取)

安装成功后,可打开RabbitMQ管理界面http://localhost:15672 默认账号密码:guest/guest

8f6ac4993e540ee4e5a821a86ce825a2.png

git仓库创建配置文件

1.master分支新建client.yml

server:
  port: 8861
spring:
    application:
        name: client
label: master

2.master分支新建client-dev.yml

server:
  port: 8861
spring:
    application:
        name: client
profile: dev

config-server

1.新建一个配置中心服务端项目,同时勾选Config Server和Eureka Discovery,作为配置中心服务端和Eureka客户端

80631eba57368130ad3559d356766fcd.png

e7fcb8250f29c4e451de322d042196f6.png

2.启动类加注解@EnableEurekaClient@EnableConfigServer

@SpringBootApplication
@EnableEurekaClient
@EnableConfigServer
public class ConfigApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigApplication.class, args);
    }

}

3.编写configServer配置

server:
  port: 8961
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
spring:
    application:
        name: config
    cloud:
        config:
          server:
            git:
              uri: 配置中心git地址
              username: 账号
              password: 密码
              #本地git保存地址
              basedir: D:WorkHqProjectconfigbasedir
#向外暴露接口 
#主要是为了暴露/actuator/bus-refresh,刷新配置信息
management:
  endpoints:
    web:
      exposure:
        include: "*"

4.添加Spring cloud bus的maven(Spring cloud bus作为消息总线,mq作为消息中间件,传递信息)

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

5.启动Config 项目,注册到Eureka,启动成功后会自动添加RabbitMQ队列

fbd583d3c000ceab0c71010e73a93819.png

6.访问地址http://localhost:8961/client-dev.yml可以访问到配置文件

ce4c61eeb29827fc7543696b4fff068d.png

config-client

继续使用上节的项目eureka-client 1.添加Config-client和Spring cloud bus的maven

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-client</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

2.修改配置文件名字,改为bootstrap.yml,这个配置文件默认优先级最高,如果不这样做,项目会默认Config-Server的端口号为localhost:8888(bootstrap意为:引导启动 只是刚好和前端框架bootstrap名字相同,它们没有关系)

3.修改配置

server:
  port: 8861
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
spring:
  application:
        name: client
  cloud:
      #Config相关配置
      config:
          discovery:
              enabled: true
              #Config-server的服务名
              service-id: CONFIG
          #环境
          profile: dev
          #分支
          label: master

这里的配置关乎拉取的规则,如下

1.{name}.yml
2.{name}-{profile}.yml
3.{label}/{name}-{profile}.yml

name:服务名
profile:环境
label:分支

1.若没有声明profile(环境),采用第1种规则,默认为master分支 2.若没有声明label(分支)时,采用第2种规则,默认为master分支

ps:当声明了profile(环境)时,会同时获取{name}.yml和{name}-{profile}.yml文件,然后合并。所以在{name}.yml文件中可写一些通用的配置

4.新建两个controller,测试从获取到的配置

@RestController
//这个注解为 刷新区域
//有这个注解,配置才能刷新
@RefreshScope
public class EnvController {
    @Value("${env}")
    private String env;

    @GetMapping("env")
    public String getEnv(){
        return env;
    }
}
@RestController
@RefreshScope
public class FenzhiController {
    @Value("${fenzhi}")
    private String fenzhi;

    @GetMapping("fenzhi")
    public String getFenzhi(){
        return fenzhi;
    }
}

5.启动项目,注册到Eureka,启动成功后,控制台会显示成功拉取配置,并自动添加RabbitMQ队列

27a5b980f58db0988a37a904ac373305.png

4d057d77179b3d661118a9260be3d734.png

6.分别访问http://localhost:8861/envhttp://localhost:8861/fenzhi可获取到相应配置

a940bd1202f68227a8aeeb8de1ef3052.png

下面的效果就表名,声明了profile(环境)时,会同时获取{name}.yml和{name}-{profile}.yml文件

556de375d5885c24665220779d602d7e.png

手动刷新配置

1.修改git仓库中client-dev.yml的env改为test

7a803918a904ab3e5421e7dc2449896e.png

2.使用Postman发送Post请求http://localhost:8961/actuator/bus-refresh(ConfigServer的服务),告诉ConfigServer,配置更新了,拉取最新配置到ConfigServer,并通过bus发送给各个ConfigClient,让它们拉取最新配置

18810e704a9024cf052445e123f7c240.png

3.访问http://localhost:8861/env,env已修改为了test,表明已获取最新配置

6a86b48dca7db02b9e46650fd1a0209d.png

自动刷新配置

1.安装内网穿透软件(使外网能访问本机),我这里使用的ngrok(官网:https://ngrok.com) 官方了提供免费的,可用于测试 注册登录后,会有操作说明,如下(我想,你应该能看懂)

9a5e99376d4ddf1049343f78924bc141.png

2.我这直接跳到第4步,开启ngrok,映射到本地8961端口(ConfigServer的端口) 到ngrok所在目录,打开console控制台,输入ngrok http 8961

a257180c08c0f1a98acfd72a54b36d5a.png

3.访问ngrok所给的域名,已成功映射(有时可能会有网络问题,多刷新几次)

6d16c004454762c889a61fede5c91e99.png

4.ConfigServer应用添加maven依赖,重启应用

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-monitor</artifactId>
</dependency>

5.配置 WebHooks 5.1 Gitlab WebHooks 配置方法:

129b860abd31e8639580e2fa02c3d256.png

5.2 Github WebHooks 配置方法:

eee2655250a779bd525b94ca1eca50da.png

5.3 Gitee(码云) WebHooks 配置方法:

aaa157b1c359920af21dd88bddd94236.png

可点击测试按钮,测试一下钩子是否能访问。(如果失败,可更换内网穿透软件,比如natapp等) 配置成功后,会在每次 push 代码后,都会给远程 HTTP URL 发送一个 POST 请求。

上面的URL就需要使用到内网穿透获取到的域名了,url为内网穿透域名/monitor

6.修改git仓库上client-dev.yml的env改为test123,通过ConfigClient获取env已更新为test123,已实现自动刷新

759d3ec7e6e090175a4920bef09a30d4.png

好叻,搞定,下节继续!

如果觉得不错,分享给你的朋友!

3b260f3010ce2d66b1b5d183121724ad.png

e1f4b5229cf0540812d0d9e9f151dd99.gif

THANDKS

  • End -

一个立志成大腿而每天努力奋斗的年轻人

伴学习伴成长,成长之路你并不孤单!

43c3b835161700f3a02db46c5f109c63.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值