决战圣地玛丽乔亚Day03
Config配置中心
为了解决多模块对应不同配置的维护问题。
Spring-Cloud-Config分为服务端和客户端两个方面,服务端是分布式配置中心(独立的微服务),客户端是我们使用的微服务端,可以通过配置中心来获取配置,加载配置信息。
这个配置中心还是和git进行整合的,所以版本管理是不用担心的。
配置分布式配置中心:
1.在git上新建一个存放配置文件的仓库。
2.修改yml文件连接到git仓库:
spring:
application:
name: springcloud-config-center
cloud:
config:
server:
git:
uri: git@github.com:HelloWorldNice/y225-springcloud-config-prac.git
search-paths:
- y225-springcloud-config-prac
label: master
3.在启动类加@EnableConfigServer注解。
访问通过 label/仓库文件路径 即可访问
客户端配置
配置一个比application.yml(用户级)权限更大的bootstrap.yml(系统级)。 bootstrap.yml不会被本地覆盖,有更高的加载优先级
yml文件:
server:
port: 3355
spring:
application:
name: springcloud-config-client
cloud:
config:
label: master
name: config
profile: dev
uri: http://localhost:3344 配置中心的地址
我们直接调用当前客户端3355的端口号+接口,即可去调用配置中心3344的config,配置中心3344从git中拿到配置信息。
这时,客户端还不能做到动态刷新,我们如果更改3344配置中心的git内容,3344会立马刷新,3355需要重启才可以刷新过来。
解决问题:
手动刷新配置信息。
1.在yml文件中暴露接口
management:
endpoints:
web:
exposure:
include: "*"
2.在Controller接口,添加注解@RefreshScope
至此,我们手动发送一个请求到客户端3355,由于RefreshScope注解的存在,会刷新配置内容。
我们可以通过发post请求这种方式刷新客户端的配置信息,但是如果需要给很多微服务刷信息,就很繁琐需要for循环来批量更新,但是如果给特定的几个微服务左配置更新,就又遇到了困难。
这时可以用到Bus消息总线的功能来解决问题。
Bus消息总线
分布式自动刷新配置。配合SpringCloud Config使用
Spring Cloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了Java的事件处理机制和消息中间件的功能。
消息代理构建一个消息主题,然后把所有微服务实例连上去,这样进行消息共享,就是消息主线
==这里的RabbitMq中的的topic中的队列是名称就是springCloudBus。==
用BUS总线去触发一个客户端刷新所有客户端 or 触发一个服务端去刷新所有客户端 ?
触发服务端刷新所有客户端更合适。如果客户端去触发刷新客户端,破坏微服务节点的对等性、如果依赖某个微服务节点去刷新,如果该节点故障就会导致无法刷新。
微服务本身应该更关注业务逻辑,不需要去做多余的刷新操作。微服务在迁移时,它的网络地址常常会发生变化,此时如果想要做到自动刷新,那就会增加更多的修改
3344-配置中心
3355-客户端
3366-客户端
配置中心添加总线的支持:
通过rabbitMq进行总线支持,所以要加入rabbitMq的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #rabbit相关配置【注:在Spring节点配置下的】 rabbitmq: host: localhost port: 5672 username: guest password: guest management: endpoints: #暴露bus刷新配置的端点 web: exposure: include: 'bus-refresh' |
客户端相同操作,修改yml文件。
我们去修改3344配置中心的配置内容,发现3355,3366没有发生改变。
我们想3344发送bus-refresh请求,发现3355,3366获取的配置内容发生了改变。达到了向一个服务端发请求刷新所有的要求。
如果像定点通知某一个微服务刷新配置:
发送POST请求到配置服务中心Server,Server通过destination参数来指定需要更新配置的服务或实例:服务名(spring的name值):端口号
例如本案例:只是通知3355的话,那么这个公式应该这样写:http://localhost:3344/actuator/bus-refresh/springcloud-config-client:3355
总结SpringCloud Config+Bus的作用
发送一个post请求给服务端,服务端(配置中心)去刷新 订阅消息队列的所有微服务的配置。
配置文件由服务端拉取git保存的配置文件发给下面的微服务。
Stream消息驱动
Sleuth分布式请求链路追踪
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!