决战圣地玛丽乔亚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的事件处理机制和消息中间件的功能。

消息代理构建一个消息主题,然后把所有微服务实例连上去,这样进行消息共享,就是消息主线

ConfigClient实例都监听MQ中同一个topic(默认是Spring Cloud Bus)。当一个服务刷新数据的时候,它会把这个信息放入到Topic中,这样其它监听同一Topic的服务就能得到通知,然后去更新自身的配置。

==这里的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获取的配置内容发生了改变。达到了向一个服务端发请求刷新所有的要求。

 

如果像定点通知某一个微服务刷新配置:

http://localhost:配置中心的端口号/actuator/bus-refresh/{destination}

发送POST请求到配置服务中心Server,Server通过destination参数来指定需要更新配置的服务或实例:服务名(spring的name值):端口号

例如本案例:只是通知3355的话,那么这个公式应该这样写:http://localhost:3344/actuator/bus-refresh/springcloud-config-client:3355

总结SpringCloud Config+Bus的作用

 

 

 发送一个post请求给服务端,服务端(配置中心)去刷新  订阅消息队列的所有微服务的配置。

配置文件由服务端拉取git保存的配置文件发给下面的微服务。

 

 

 

Stream消息驱动

 

Sleuth分布式请求链路追踪

 

posted @   NobodyHero  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示