Spring Cloud第七站Config与Bus

Config简介

  config在微服务架构中,充当的作用的配置中心。在微服务架构中,因为将不同的模块拆分成了更小的粒度,但是每个模块都必须配置相关的配置文件,使得在管理配置文件的时候非常的不方便。而config的作用就用配置统一的外部远程配置仓库。
在这里插入图片描述
因为,配置中心使用的是外部(可以是Git、SVN)。这里我就使用github为例。
在这里插入图片描述

config分为服务端与客户端

服务端配置

  1. 新建cloud-center-config模块,引入依赖
		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
  1. 配置yml文件
     原本配置的ssh链接地址,但是ssh出现了一点小问题。所以改用https连接协议了,使用https连接协议需要追加private-key本地私钥.
server:
  port: 3344
spring:
  application:
    name: cloud-config
  cloud:
    config:
      server:
        git:
          #uri: git@github.com:ct7cxz/springcloud-config.git #git上的ssh地址
          uri: https://github.com/ct7cxz/springcloud-config.git	#git上的https地址
          search-paths:
            - springcloud-config    #搜索路径名
          private-key: #本地git的私钥
      label: master
  1. 启动类上新增config相关注解
    新增@EnableConfigServer注解
  2. 测试
    获取远程配置,官方文档提供了5中配置方法
    config官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-config/2.2.3.RELEASE/reference/html/

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

看似是五种,其实只要弄清楚标签作用,其实很好记忆的
以/{label}/{application}-{profile}.yml为例
{label}–指的是git的分支
{application}–指的是配置前缀名
{profile}–具体配置
在这里插入图片描述
所以访问的话,就是
在这里插入图片描述
客户端配置
客户端默认去寻找服务端从远程仓库获取到的信息

  1. 新建客户端接口引入相关依赖
		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
  1. yml文件中配置相关的配置信息
server:
  port: 3355
spring:
  application:
    name: cloud-config
  cloud:
    config:
      label: master
      name: config
      profile: dev
      uri: http://localhost:3344/
  1. 新建restController接口,测试客户端是否成功获取到了服务端数据
@RestController
public class ConfigController {

    @Value("${config.name}")
    private String name;

    @RequestMapping(path = "/configName")
    public String getName() {
        return name;
    }
}

访问接口
在这里插入图片描述

config客户端与服务端配置完毕了,但是,如果我修改了一次远程仓库的数据呢
在这里插入图片描述
服务端再次访问
在这里插入图片描述
看起来没什么问题了,但是当我们试图访问客户端时,问题出现了
在这里插入图片描述
 客户端并没有将数据更新到最新,只有当服务端重启后,接口数据才会同步到最新。那么有没有什么配置,能够做到让客户端自动刷最新配置呢?
答案是,有

  1. 引入监听依赖
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
  1. 新增yml配置
management:
  endpoints:
    web:
      exposure:
        include: "*"
  1. 新增自动刷新接口
    新增 @RefreshScope注解
    在这里插入图片描述
    并且,每次跟新完,都发送一次post请求到客户端,通知它刷新数据
curl -X POST "http://localhost:3355/actuator/refresh"

 但是,如果连接服务端的客户端比较多的时候。这种每次要给每个客户端发送一次post请求,让客户端同步到服务端当前最新配置的方法,在小业务应用场景还凑合,但是当客户端数量过大时,显然这种方法是不合适的。怎么解决这个问题,需要使用到下边介绍的Bus

Bus简介

  Bus又名服务总线.Spring Cloud Bus能管理和传播分布式系统间的消息,就像一个分布式执行器,可用于广播状态更改、事件推送等,也可当作微服务间的通讯通道。
  Bus的广播通讯是通过集成RabbitMQ、Kafka消息队列完成的。
使用Bus完成,一次修改,广播通知,处处刷新
为体现一次修改,能修改所有的客户端,这里我将3355端口的配置,copy了一份到新建的3377端口中。

  1. 所有客户端与服务端新增Bus依赖
		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
  1. 修改服务端的yml文件
spring:
  rabbitmq:
    username: guest
    password: guest
    port: 5672
    host: localhost
#rabbitMq相关配置,暴漏bus刷新配置的端点
management:
  endpoints:
    web:
      exposure:
        include: 'bus-refresh'
  1. 修改客户端的yml文件
#每个客户端都要完成配置
spring:
  rabbitmq:
    username: guest
    password: guest
    port: 5672
    host: localhost
  1. 启动测试
    修改github的配置文件,并且对服务端口发送post请求,通知客户端刷新配置文件
curl -X POST "http://localhost:3344/actuator/bus-refresh"

  另外,可以通过在uri中追加详细的通知端口号,达到定点通知的目的,例如只通知3355端口号。

curl -X POST "http://localhost:3344/actuator/bus-refresh/cloud-config:3355"

追加的时微服务的服务名与具体的端口号。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值