SpringCloud>12 - 自动刷新–bus

扯淡:

上一章】配置刷新是针对某一个服务的,请求对应服务的refresh只能更新自己的配置。而在实际生产环境中服务都是以集群的方式存在的,不可能每一个都去重启,spring cloud bus只需要请求通知一个。

个人学习总结:
链接:【springboot、springcloud、docker 等,学习目录】     

webhook:

码云、GitHub上均有此功能。当指定的事件触发时,会发送post请求给事件的发生者。

这里可添加事件触发后的post请求地址,以及事件(push,issue、pull等),请求地址可以指定为刷新服务的地址。

spring cloud bus 简介:

消息总线,通过消息中间件连接分布式的各个节点,以广播的方式在分布式系统中传播消息。常用的有RabbitMQ、kafka。

spring cloud bus 使用:

基本步骤:
1、提交修改后的配置,触发事件响应post请求(git中webhook配置的地址,为了方便管理,此处的post请求地址配置为server端)。
2、config server 接收到请求,将配置更新的消息发送到消息总线。
3、mq 接收到消息后广播消息到其它客户端。
4、客户端接收到消息请求服务端获取自己的配置。

config server修改:

springcloud_config模块:

1、pom依赖:

    <dependencies>
        <!-- 提供监控功能 此处引入是需要refresh 的功能 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- 使其支持消息总线 也可使用卡夫卡-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
        <!-- config server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>

2、添加mq的配置:

# mq 配置
spring:
  rabbitmq:
    host: 192.168.25.133
    port: 5672
    username: guest
    password: guest

# 2.0之后,默认的监控端点地址加了上下文路径 actuator。可通过 management.endpoints.web.base-path属性进行修改,默认是: actuator
# 2.0之后,默认只开启了端点 info、 health。其他的需要通过 management.endpoints.web.exposure.include进行额外配置。
# 配置刷新
management:
  endpoints:
    web:
      exposure:
        include: '*'

config client修改:

每个需要通过config server拉取配置的微服务都是config client:

1、pom依赖:

        <!-- 提供监控功能 此处引入是需要refresh 的功能 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- 使其支持消息总线 也可使用卡夫卡-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>

2、修改配置:

spring:
  cloud:
    config:
      # config server 地址
      uri: http://127.0.0.1:8000
      # name、profile 配置文件的命名
      name: user
      profile: dev
      label: master # 存储为git时 默认为 master
    bus:
      trace:
        enabled: true # 开启消息追踪 默认 false

# mq 配置
  rabbitmq:
    host: 192.168.25.133
    port: 5672
    username: guest
    password: guest

# 2.0之后,默认的监控端点地址加了上下文路径 actuator。可通过 management.endpoints.web.base-path属性进行修改,默认是: actuator
# 2.0之后,默认只开启了端点 info、 health。其他的需要通过 management.endpoints.web.exposure.include进行额外配置。
# 配置刷新
management:
  endpoints:
    web:
      exposure:
        include: '*'

此处bus和mq的配置均可放到远程配置文件中,我为了方便修改放到了bootstrap.yml中,可能修改的配置放到远程配置文件中管理。

测试:

1、启动Eureka,config server,用户微服务使用不同的端口启动两个。

注意:版本或依赖的不同,可以访问的端点可能不同,具体看自己的日志。

1.1、destination:service id 具体到某一个微服务,当不想所有的微服务重新获取配置时使用。

例如:http://127.0.0.1:8000/actuator/bus-refresh/springcloud-user:8082

修改配置后只让用户为微服务的8081刷新配置。

1.2、没有参数:所有的微服务重新获取

例如:http://127.0.0.1:8000/actuator/bus-refresh

2、分别访问127.0.0.1:8081/user/getRefreshTest、127.0.0.1:8082/user/getRefreshTest

可以返回配置文件配置的sms。

3、修改git上配置文件sms字段值。

4、请求:http://127.0.0.1:8000/actuator/bus-refresh 刷新配置,也可将此链接配置到webhook中,当提交代码到码云上时,触发push事件来请求该地址。

5、再次请求服务地址,得到新的结果。

总结:

1、webhook 可使用回调地址做到提交代码发送请求。
2、某些项目会将刷新配置的请求做成按钮的形式。、
3、spring cloud bus 是用消息中间件将分布式的各节点联系起来。
4、配置修改通知config server,server 再通知各个微服务访问server拉取自己的最新配置。

代码地址:

https://gitee.com/cpla026/springcloud/tree/master/springcloud_parent/springcloud_user_bus


个人微信公众号,谢谢支持!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值