利用springcloud config + webhook实现微服务配置文件批量自动化更新,无需重启项目和手动请求接口

版本说明:

springboot:2.5.4   springcloud:2020.0.3 

这两个我用的都是现在最新版本的,如果你的版本较低,此教程可能不适用你,建议和我保持一致,然后再往下看

实现原理:

(盗一张别人的图,稍微修改了下,原理大概就是下面这样子)

 简单说下整个流程:

1,git上配置文件发生变更,触发git上的webhook发送请POST请求到配置中心服务器,告诉配置中心配置文件被修改了

2,配置中心发送配置更新消息到消息总线

3,消息总线通知所有订阅的微服务,告诉他们配置文件被更新了

4,微服务收到消息之后请求配置中心,拉取最新的配置文件并完成更新

实现步骤:

配置中心客户端实现:

1,添加下方依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>

2,创建bootstrap.yml配置文件,添加下方配置

spring:
  application:
    name: euraka-provider #服务名

#配置中心相关配置
  cloud:
    config:
      discovery:
        enabled: true
        service-id: config-server #这里是配置中心服务名
      profile: dev  #这里是配置文件环境名,一般是dev,test,prod这些
      label: master #这里是配置文件在git上的所在分支

#rabbitmq相关配置,这个用做消息总线发送消息通知
  rabbitmq:
    host: 192.168.109.132
    username: admin
    password: admin

server:
  port: 8081
#注册中心相关配置
eureka:
  client:
    service-url:
      default-zone: http://localhost:8761
  instance:
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}

#这里定义暴露actuator的那些接口,*代表暴露所有接口
management:
  endpoints:
    web:
      exposure:
        include: '*'

  3,启动类上添加下方注解:

@EnableEurekaClient

至此配置中心客户端完成

配置中心服务端实现:

添加下方依赖:

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

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-monitor</artifactId>
        </dependency>

2,application.yml文件添加下方配置:(注意有些配置项内容需要自己去修改,如git的url和用户名密码等)
 

spring:
  application:
    name: config-server
#配置中心服务端git相关配置
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/xxxx/xxxx.git 配置中心git仓库地址
          username: git用户名
          password: git密码
          search-paths: / 配置文件在分支下的所在路径
  #消息队列的配置     
  rabbitmq:
    host: 192.168.109.132
    username: admin
    password: admin
#注册中心相关配置
eureka:
  client:
    service-url:
      default-zone: http://localhost:8761/euraka
  instance:
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
#应用的启动端口
server:
  port: 8080
#设置暴露actuator的那些接口,*为暴露全部接口
management:
  endpoints:
    web:
      exposure:
        include: '*'

3,启动类上添加下方的注解:

@EnableEurekaClient
@EnableConfigServer

至此,配置中心服务端搭建完成

测试效果:

1,在git的master分支上创建配置文件:euraka-provider-dev.yml

文件名中的:euraka-provider 是客户端的服务名

dev是profile的值

 文件名称一定要按照这个规则去命名,否则会找不到

2,在配置文件里面加入配置项:

test: 90809809发送到发送到方式

3,配置webhook

我用的是gitee码云,配置路径:你的项目git仓库-》管理-》webhooks

进入后点击添加webhook,输入url http://配置中心外网地址/monitor?path=*后点直接点添加即可完成配置

(这里要注意的是,url是你的配置中心服务端的地址,且必须是外网地址 如果没有外网,可以使用内网映射来解决:推荐 ngrok ,免费,不推荐natapp,因为免费通道需要实名认证,容易泄露个人隐私)

4,在客户端新建controller测试获取配置

这里特别注意,一定要在类上加上@RefreshScope这个注解,只有加了这个注解才能刷新底下的配置


import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope
public class TestController {

    @Value("${test}")
    private String profile;

    @RequestMapping("/getProfile")
    public String getProfile() {


        return profile;
    }
}

5,使用postman请求上面的 getProfile接口

6,修改git上配置文件的test为:123456

 7,重新请求上面的 getProfile接口,成功获取到最新的配置

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ivan_梦方舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值