Spring Cloud Config 2.x 中手动通过访问/actuator/bus-refresh
可以正常刷新,但是通过配置 webhooks 访问/monitor
无法刷新配置
配置 Webhooks 不生效
在 Github 中配置 Webhooks,当配置发生变动时推送到配置中心的/monitor
,发现配置中心没有响应,查阅相关资料后,发现需要引入如下依赖包
1 | <dependency> |
加入依赖以后,/monitor
就可以正常请求了,但下面还有一个坑会导致客户端不会自动刷新。
“/monitor”能正常请求,但客户端配置不刷新
这种情况一般都是因为spring.cloud.bus.id
出现了问题,我们先在客户端配置中设置一下日志打印级别:
1 | logging: |
然后重启应用,然后在配置重新中修改配置,发现在客户端出处如下日志:
这段日志相关代码如下
1 | protected boolean matchMultiProfile(String pattern, String idToMatch) { |
从代码中我们大概能猜到了,就是查看发过来的消息是否属于自己,如果不属于就不处理,然后日志中正则为order:dev:**
,待匹配字串为 order:9909:99ca1d69f9845bdeea2518b24ddea9fc
这明显是不匹配的,所以客户端没有刷新配置。
查看官方文档关于spring.cloud.bus.id
的描述
可以看到每个应用都有一个Service ID, 默认的值是app:index:id
的组装,规则是:
app
:如果vcap.application.name
存在则使用vcap.application.name
,否则使用spring.application.name
(默认值为application)index
:优先使用vcap.application.instance_index
,否则依次使用spring.application.index
、local.server.port
、server.port
、0
id
: 如果vcap.application.instance_id
存在则使用vcap.application.instance_id
,否则给一个随机值
从上面的日志中,我们看到是app:index:id
中的index
不一致,有如下两种修改方法
方法一:设置vcap.application.instance_index
1 | vcap: |
方法二:修改bus.id
匹配规则
1 | spring: |
注意spring.application.name
和spring.cloud.config.profile
要提前定义好