解决GitHub的webhooks访问/actuator/bus-refresh无法刷新配置

使用SpringCloud Bus动态刷新配置需要访问 config服务端的接口/actuator/bus-refresh(以post方法),例如我config服务端启动在本机的8080端口:http://localhost:8080/actuator/bus-refresh

但是每次修改文件都要自己手动去访问链接有点麻烦,所以可以使用GitHub上的webhooks,其作用就是每次重新提交配置时会以POST方法去访问一个链接,(码云上也有这个东西),但是GitHub上配置了之后总是访问失败,报如下错误:

2019-03-21 19:28:06.681 TRACE 5624 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet        : POST "/actuator/bus-refresh", parameters={}, headers={masked} in DispatcherServlet 'dispatcherServlet'
2019-03-21 19:28:06.682 TRACE 5624 --- [nio-8080-exec-2] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped to Actuator web endpoint 'bus-refresh'
2019-03-21 19:28:06.871 DEBUG 5624 --- [nio-8080-exec-2] .w.s.m.m.a.ServletInvocableHandlerMethod : Could not resolve parameter [1] in public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>): 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
 at [Source: (PushbackInputStream); line: 1, column: 295] (through reference chain: java.util.LinkedHashMap["commits"])

然后觉得应该是在发送请求时是不是添加了额外的参数导致无法识别什么的。(大佬求教)

之后自己就写了方法来进行请求转发,过滤一次webhooks的请求:
例如:config服务端的刷新接口为:http://localhost:8080/actuator/bus-refresh,我使用natapp,将 http://3tzx5e.natappfree.cc 映射到127.0.0.1:8080


然后在config服务端里新建请求转发的类:

@Controller
public class RefreshController {

    @RequestMapping("/refresh")
    public void refresh(){
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders httpHeaders = new HttpHeaders();
        # 设置content_type为json要不然会报415的错误
        httpHeaders.add(HttpHeaders.CONTENT_TYPE,"application/json");
        HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(null,httpHeaders);
        # 以post方法访问真正的刷新链接
        ResponseEntity<String> stringResponseEntity = restTemplate.postForEntity("http://localhost:8080/actuator/bus-refresh",
                request, String.class);
    }
}

 

之后再到webhooks配置每次提交文件时访问该链接(http://3tzx5e.natappfree.cc/refresh):

配置好之后,我们重新修改配置文件,然后提交。


我们可以在rabbitmq的管理页面看到有消息响应:

也可以看见config服务端、客户端控制台重新抓取配置文件的日志。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值