springCloud 配置中心与github同步配置无法刷新config-client

本文的配置适用于springCloud 2.X版本

(1)config-server所需要的依赖


implementation 'org.springframework.cloud:spring-cloud-starter-bus-amqp'

implementation 'org.springframework.cloud:spring-cloud-config-monitor'
(2)config-server配置文件

spring
    rabbitmq:
        host: localhost
        port: 5672
        username: guest
        password: guest

#禁用安全组,将接口暴露在外面,方便测试     
management:
  endpoints:
    web:
      exposure:
        include: "*"
(3)config-client所需要的依赖

implementation 'org.springframework.cloud:spring-cloud-starter-bus-amqp'
(4)config-clinet配置文件

spring:
  cloud:
    bus:
      trace:
        #开启监听
        enabled: true
        #代表该实例,在github刷新的时候要用到。
      id: ${vcap.application.name:${spring.application.name:application}}:${vcap.application.instance_index:${spring.cloud.config.profile:${local.server.port:${server.port:0}}}}:${vcap.application.instance_id:${random.value}}
      
#禁用安全组,将接口暴露在外面,方便测试      
management:
  endpoints:
    web:
      exposure:
        include: "*"
(5)将刷新的配置显示出来



@RestController
@RefreshScope
public class ProductController {

    @Value("${server.servlet.application-display-name}")
    private String displayName;

    /**
     * 提供输出hello信息
     *
     * @param name 名字
     * @return "hello @name,this is producer service message!"
     */
    @RequestMapping("hello")
    public String hello(@RequestParam String name) {
        return "hello " + name + ", this is " + displayName + " service message!";
    }
}
(6)在github中的配置



1.Payload URL(在仓库更新时github会向你的配置中心发送一个请求,来刷新你配置中心的配置)
2.Content type(参数类型)
3.secret 用作给POST的body加密的字符串。采用HMAC算法
4.选择只有在提交代码的时候才会触发


1.Payload URL:必须是可访问的域名!而且格式为http://域名/monitor?path=* 。在springboot2之前使用的是/bus/refresh。后来改成/actuator/bus-refresh,但是github他会附带一个payload参数,这玩意好像解析不了,会给你默认为String。然后就报错。所以要使用最新的接口/monitor,这时springCloud专门提供的。path是官方文档说你所要刷新到那个客户端,*表示所有的config-client
2.Content type:application/json

遇到的错误:
springCloud 配置中心与github同步配置无法刷新config-client_第1张图片
springCloud 配置中心与github同步配置无法刷新config-client_第2张图片
看上面的body

{"timestamp":"2019-07-18T09:31:48.081+0000","status":400,"error":"Bad Request","message":"JSON parse error: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token\n at [Source: (PushbackInputStream); line: 1, column: 298] (through reference chain: java.util.LinkedHashMap[\"commits\"])","path":"/actuator/bus-refresh"}

所以之后的版本要使用/monitor这个

遇到的坑

你按照网上的一步步配置之后,你会发现,只能刷新config-server的

无论你怎么搞都是刷新不了config-client中的配置

有幸在github上廖师兄也提到了这个问题,解决方案是在config-client中加入
了一个配置。

地址在这里可以去看看:https://github.com/spring-cloud/spring-cloud-bus/issues/124

spring:
  cloud:
    bus:
      id: ${vcap.application.name:${spring.application.name:application}}:${vcap.application.instance_index:${spring.cloud.config.profile:${local.server.port:${server.port:0}}}}:${vcap.application.instance_id:${random.value}}

鸣谢:

https://blog.csdn.net/w405722907/article/details/86712781

https://blog.csdn.net/shijiujiu33/article/details/95975365

https://blog.csdn.net/antma/article/details/81369872
(含有详细的配置,请参考)

你可能感兴趣的:(程序小问题)