springcloud - bus 生产中遇到的问题

统一配置中心,通过git远程仓库的 /bus-refresh 来刷新数据,发送给配置服务然后配置服务在通过MQ发送给消费端,进行对配置的统一更新
在这里插入图片描述
但是使用的细节需要注意,比如从pom文件引入的依赖,如果是springboot2.0开始,使用的版本应该是build-snapshot,不然会报错在这里插入图片描述
然后再引入springcloud-bus-amqp 才会成功
在这里插入图片描述
有时候更新了版本之后,之前的启动依赖名称可能改变,这时候需要从官网上查找对应的版本号的名称进行引入,譬如M2版本的feign在build-snapshot改为了openfeign
在这里插入图片描述
还有一些开发过程中遇到的问题,譬如通过控制台,查看服务映射的文件,URL等没有bus-refresh,这时候在浏览器访问这个端口就会出现404,这时候就需要通过yml文件进行配置,把所有的接口都暴露,这里 management.endpoints.web.expose=* 表示所有的接口都暴露
在这里插入图片描述
这时候从启动服务看到控制台信息有了请求的方式以及URL
在这里插入图片描述
通过启动了消费端,从rabbitMQ发现确实是有产生了队列,而通过docker界面使用 命令 curl 来启动http://localhost:8080/actuator/bus-refresh ,发现消费端的配置依然没有生效
在这里插入图片描述
归结这里的原因是刷新作用域的问题这里需要在controller层加入注解 @refreshScope
在这里插入图片描述
这时候修改了远程git上的配置,然后在docker上执行 curl -v -X post busUrl 就可以实现不重启消费端实现实时的更新配置。
我们来总结一下这的原理,是通过远程git仓库对配置进行统一管理然后通过在配置服务以及消费端服务配置amqp的依赖,使用到mq作为传输的载体传输更改的信息,只要更新了git的配置在docker执行curl命令就可以实现配置的统一刷新。
而在实际生产上使用的比较多的也有另外一种方式:就是用使用自定义配置类,而且配置类映射到配置文件里面的前缀,在配置类里面加上@scopeRefresh 进行实时的刷新配置,而在controller层就不需要加域刷新,直接通过@autoWire 注入配置类的依赖 使用配置文件的更新内容
在这里插入图片描述
可以看出来不管是哪种方式,都需要依赖的是amqp的起步依赖以及docker刷新给队列,还有就是对外暴露的接口管理,以及刷新的作用域,统一这些信息就可以实时更新配置。

猜你喜欢

转载自blog.csdn.net/weixin_30947631/article/details/85045630
今日推荐