7_spring-cloud-config-center


配置中心

  • spirng-cloud-config + github 搭建;
  • 服务比较多, 下发配置文件比较麻烦;
  • 服务启动时, 从公共服务拉取配置信息; 这个公共服务就是配置中心
  • 什么样的数据需要放配置中心:
    • 个性化的配置, 这种情况可以放本地, 或者命令行传入;
  • 3个角色:配置存储方-github/gitlab、配置读取方-configServer、配置使用方-普通的微服务节点,从configServer获取配置;

使用

  • 也需要一个独立的服务;

  • 依赖:

<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>
  • 完整pom:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.go.cn</groupId>
    <artifactId>config-center</artifactId>
    <version>0.0.1</version>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
    </properties>

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

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
  • @EnableConfigServer
  • 改配置文件:其实是新项目的完整配置:
server:
  port: 9000

eureka:
  client:
    service-url:
      defaultZone: http://euk1.com:7000/eureka/
spring:
  application:
    name: config-server
  cloud:
    config:
      label: master
      server:
        git:
          uri: https://github.com/xxx/config-center.git
  • 测试地址:http://localhost:9000/master/config-client-dev.properties

匹配规则

获取配置规则:根据前缀匹配
/{name}-{profiles}.properties
/{name}-{profiles}.yml
/{name}-{profiles}.json
/{label}/{name}-{profiles}.yml

---
lable:仓库分支、默认master分支
name:服务名称
profile:环境名称,开发、测试、生产:dev qa prd

---
匹配原则:从前缀开始。

具体节点从配置中心读取配置

  • 此处使用consumer 节点;配置文件名称要从 application.properties/application.yml 修改为 bootstrap.properties/bootstrap.yml
  • 需要注意 consumer 要在 ConfigCenter 启动之后再启动。bootstrap.yml 和 application.yml 是可以共存的。
  • 引入依赖:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-client</artifactId>
</dependency>
  • bootstrap.yml 配置文件:
spring:
  cloud:
    config:
      label: dev
      profile: dev
      uri: http://localhost:9000/
  • controller:
 @Value("${config.info}")
    String info;

@GetMapping("/configInfo")
public Object configInfo() {
    return info;
}
  • curl -Lv http://localhost:90/configInfo

刷新配置

单个刷新

  • 修改配置文件后热生效/加载:
    • Controller 上加: @RefreshScope
    • 加 actuator,开启actuator中的refresh端点
    • 开放/暴露端点;
  • 手动更新一个服务: post 请求 http://ip:port/actuator/refresh;

批量刷新

  • 批量更新: 使用消息总线 bus, 与注册中心的区别在于, bus 是主动推消息的, 而注册中心的数据需要拉取;

bus 使用

  • 需要一个mq: spring-cloud默认支持 rabbitmq, kafka;
  • 安装 rabbitmq:
    • rabbitmq 注意 rabbitmq-plugins enable rabbitmq_management;
    • 默认用户: guest/guest;
    • 具体安装步骤参考:https://blog.csdn.net/wwq921220/article/details/126923410
  • 添加 amqp 依赖,config-center 和 consumer 都要进行添加:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  • 配置文件调整:consumer 配置在 bootstrap.yml 中:
# 这一段consumer 和 config-center 都需要配置
spring:
  rabbitmq:
    host: 192.168.1.9
    username: admin
    password: 123456
    port: 5672

  # 这一段只有 consumer 进行配置
  cloud:
    config:
      discovery:
        enabled: true
        service-id: config-server
      label: dev
      profile: dev

#  config-center 没有配置中心的配置时,需要这一段
eureka:
  client:
    service-url:
      defaultZone: http://euk1.com:7000/eureka/
  • 某个服务集群批量更新,向服务任一端点发送post请求: curl -X POST http://ip:port/actuator/bus-refresh
  • 所有服务集群批量更新: 将mq/amqp/actuator打开端点 那一套配置到 config-center 上, curl -X POST http://config_center_ip:port/actuator/bus-refresh
  • config-center 暴露端点:
management:
  endpoints:
    web:
      exposure:
        include: '*'

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值