小言_互联网的博客

SpringCloud - 统一配置中心(二)

363人阅读  评论(0)

在之前的SpringCloud - 统一配置中心(一)基础上,我们再升级下,如何让统一配置自动发布更新到各个 yml 上。

 

Spring Cloud Bus自动更新配置

  • Spring Cloud Bus自动更新配置原理:SpringCloud Bus可以实现,自动刷新。怎么实现呢,通过消息中间件,config-server用了Bus之后会提供一个/bus-refresh接口,然后webhook可以让git去访问这个接口,访问了这个接口就可以把更改的配置,发送到消息中间件。

 

开始

Config Server & Config Client(e.g. Order)

1、对于 config server config client 微服务项目中,修改版本,正式版本是不需要修改的:spring boot修改版本为2.0.0.BUILD-SNAPSHOT,因为2.0.0.M3使用springCloud Bus是有bug的,spring cloud修改版本Finchley.BUILD-SNAPSHOT。

2、引入依赖 spring-cloud-starter-bus-amqp,添加刷新并启动config server项目。

3、对于 order 微服务项目,spring-cloud-starter-feign修改版本为spring-cloud-starter-openfeign,升版本后,这个组件叫openfeign了。

4、MQ访问地址:localhost:15672,配置好并重启order和config应用后,RabbitMQ上会出现2个消息队列,如图所示。


  
  1. # config server
  2. spring:
  3. application:
  4. name: config
  5. cloud:
  6. config:
  7. server:
  8. git:
  9. uri: https://gitee.com/SpringCloud_Sell/config-repo
  10. username: lly835@ 163.com
  11. password: T #27h*E$cg@%}j
  12. basedir: /Users/admin/code/myProjects/java/imooc/SpringCloud_Sell/config/basedir
  13. eureka:
  14. client:
  15. service-url:
  16. defaultZone: http://localhost: 8761/eureka/
  17. management:
  18. endpoints:
  19. web:
  20. expose: "*"

5、另外bus-refresh接口默认不暴露,需要在yaml配置文件中暴露出来。配置好重启后观察控制台日志输出(*号是全部暴露出来的意思)。


  
  1. package com.imooc.order.controller;
  2. import org.springframework.beans.factory.annotation.Value;
  3. import org.springframework.cloud.context.config.annotation.RefreshScope;
  4. import org.springframework.web.bind.annotation.GetMapping;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7. @RestController
  8. @RequestMapping( "/env")
  9. @RefreshScope
  10. public class EnvController {
  11. @Value( "${env}")
  12. private String env;
  13. @GetMapping( "/print")
  14. public String print() {
  15. return env;
  16. }
  17. }

6、在需要自动刷新配置的类上(在order服务的controller上)加注解@RefreshScope(完成就可以自动刷新配置了)。

7、远程git仓库改完配置后,需要调用config-server的bus-refresh接口才会生效,两种方式

  • 手动:curl -v -X POST “http://XXX/actuator/bus-refresh”
  • 自动:通过git服务器的webhook实现

  • 码云开源中国跟springcloud的config还没兼容。先在github上面在项目的settings的webhook目录中把config的服务器地址加上monitor。
  • 
        
    1. <!-- Config Server -->
    2. <dependency>
    3. <groupId>org.springframework.cloud </groupId>
    4. <artifactId>spring-cloud-config-monitor </artifactId>
    5. </dependency>

    Ps:Config Server 专门提供了 monitor 组件,Config Client 上是没有的噢。

8、这样下来,git 上面配置无论再怎么修改,都可以统一自动刷新并同步啦。

 

  • 目前所兼容Spring Cloud & Webhook的Git仓库。

转载:https://blog.csdn.net/Dream_Weave/article/details/105451209
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场