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请求到配置中心

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

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

    • 完成更新

 

posted @ 2020-10-24 17:16  一半人生  阅读(2443)  评论(0编辑  收藏  举报