• Config配置中心使用和配置,以及刷新配置


    Config配置中心架构

    步骤分析

      1.创建一个Config项目用于提供配置

      2.抽取服务提供者项目中的共有配置

      3.配置刷新机制设计和实现方式(两种)

    创建Config项目

    导包,因为我们采用的eruake注册中心,所以要导eruake包,这里不细讲eruake注册中心的配置了,上一篇有配置和集群搭建

    <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>

    yml配置文件,如果是私有库需要设置用户密码

    spring:
      application:
        name: config-server
      cloud:
        config:
          server:
            git:
              uri: https://gitee.com/xxxx/xxx.git
              #如果设置了私有仓库那么需要配置用户名和密码
              username: xxx
              password: xxx
    server:
      port: 9999
    #配置eureka客户端
    eureka:
      client:
        service-url:
          defaultZone:  http://eureka1:8761/eureka,http://eureka2:8762/eureka

    创建一个git仓库

     抽取服务提供者的共有配置内容,比如mysql配置

     最后一个字段alicName用来区别环境。

    配置UserService用户服务提供者

    导包,让提供者也拥有config配置中心支持

    <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>

    application/bootstrap,这两个都是boot启动是默认加载的配置文件。

    application: 一般用于配置用户的配置

    bootstrap:一般用于配置程序启动的引导配置,优先级别最高

    先修改配置文件名

    application.yml-->bootstrap.yml

    配置config配置中心中读取配置

    原来的yml

     修改后的

    spring:
      application:
        name: user-server
      #被提取到gitee中了
      cloud:
        config:
          discovery:
            #开启使用config配置中心
            enabled: true
            #配置中心服务应用名称
            service-id: config-server
          #git分支名称
          label: master
          #git文件名称
          name: user
          #git文件环境
          profile: test
    #mybatis别名
    #被提取到gitee中了
    
    #配置eureka客户端
    eureka:
      client:
        service-url:
          defaultZone:  http://eureka1:8761/eureka,http://eureka2:8762/eureka
      instance:
        prefer-ip-address: true
    server:
      port: 8001
    标红的  service-id 属性必须与eruake中的注册的config服务名相同才能拉取到配置

    启动

      顺序:注册中心 ----> 配置中心 ----> 用户服务

    配置更新问题

    加入此时git中的配置文件有修改我们此时需要重启Config配置的项目进行拉去最新配置,然后重启提供者项目从eruake中拉取更配置。

    如果是线下测试项目还好说,如果是线上项目可能会造成损失。

    解决方案:

      1.重启用户服务(不建议)

      2.加入依赖 actuator,提供一个刷新配置的接口进行动态更新

      3.使用rabbitmq进行集群更新

    第一个介绍过了,我们直接介绍后面两种的具体使用方法。

    actuator使用方法

    还是在服务提供者项目中加入依赖

    <!--健康检测 监测-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    在配置文件中添加配置,暴露一个刷新的接口

    management:
      endpoints:
        web:
          exposure:
            #此处刷新地址必须叫refresh
            include: refresh

    在接口controller添加注解 @RefreshScope,不能加载启动类上,会无效!无效!无效!无效!无效!

    @RestController
    @RefreshScope
    public class UserController {
    
        @Autowired
        UserService userService;

    ........

    现在我们重启项目然后测试一下,因为配置中心使用的是test环境,所以修改test的配置文件

     在controller暴露一个属性实时查看效果,对应到实体类中的massage属性

     刷新前测试没有变化

     使用暴露的接口进行刷新

     提示刷新成功。

    再进行测试

     已经刷新到最新的修改了。动态修改配置成功。

    注意事项:

      1.actuator包局限性大,每次只能刷新一个服务的配置,例如我们的提供者服务是集群搭建那么就不能只刷新8001端口了,需要刷新所有的服务。

      2.请求的刷新地址是固定的  http://{你的主机名}:{服务暴露的端口}/actuator/refresh,并且Content-Type必须为application/json,必须是POST请求。

      3.推荐使用rabbitmq的全局刷新

    RabbitMq刷新配置和使用,Bus-消息总线

    RabbitMq的安装和启动不讲解了

    需要注意的是上一种方式只需要修改服务提供者,使用rabbitmq需要同时对提供者和配置中心进行修改。

    Config配置中心

    导包

    <!--健康检测 监测-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!--mq支持-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-bus-amqp</artifactId>
    </dependency>

    修改配置文件

    • rabbitmq ip地址

    • rabbitmq port端口

    • 暴露刷新地址 --> bus-refresh

    在spring:下添加

    rabbitmq:
     #你的rabbitmq地址 host: xx.xxx.xx.xxx
    #若没修改以下属性则会自动配置为默认
    # port: 5672
    # username:
    # password:

    与spring:平级直接添加

    management:
      endpoints:
        web:
          exposure:
            #此处暴露地址必须叫 bus-refresh
            include: bus-refresh

    改造用户服务

    导包

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bus-amqp</artifactId>
    </dependency>

    spring: 下添加配置

    #此处注意rabbitmq前面有缩进,一定添加到spring下
    rabbitmq:
      host: xx.xxx.xxx.xxx

    发送请求

     可能会状态码204,但是不影响结果,按照步骤修改git配置文件,然后发送请求就可以看到结果了。

    总结

      1.请求必须是post,http://{你的主机地址}:{端口号}/actuator/bus-refresh,刷新全部

      2.也持支刷新单个 http://{你的主机地址}:{端口号}/actuator/bus-refresh/{eruake中的服务名:端口号}

      3.他都做了什么呢 ?

      • 用户发送post请求到配置中心

      • 配置中心会发送消息至所有用户服务,告知需要拉取最新配置

      • 所有用户服务接收到消息,从配置中心获取最新配置

      • 完成更新

  • 相关阅读:
    LeetCode 654. Maximum Binary Tree
    LeetCode 680. Valid Palindrome II
    LeetCode 581. Shortest Unsorted Continuous Subarray
    LeetCode 665. Non-decreasing Array
    LeetCode 604. Design Compressed String Iterator
    LeetCode Largest Palindrome Product
    LeetCode 605. Can Place Flowers
    LeetCode Sum of Square Numbers
    LeetCode Maximum Average Subarray I
    LeetCode 673. Number of Longest Increasing Subsequence
  • 原文地址:https://www.cnblogs.com/xiaozhang666/p/13870101.html
Copyright © 2020-2023  润新知