当前位置: 首页 > article >正文

spring cloud之配置中心

Config 统一配置中心(*)

1.简介
# 统一配置中心
- 官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-config/2.2.3.RELEASE/reference/html/#_spring_cloud_config_server

- config 分为 config server 和 config client。用来统一管理所有微服务的配置
  • 统一配置中心流程图
    在这里插入图片描述
2.config server 开发
  • 引入依赖
<!-- config server -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 健康检查 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- consul 注册中心 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
  • 配置文件
server.port=8555
# 服务名
spring.application.name=CONFIG-SERVER

# consul 注册中心地址
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500

# gitee 仓库地址
spring.cloud.config.server.git.uri=https://gitee.com/lwwby/config-center.git
# 指定默认拉取配置信息的分支名
spring.cloud.config.server.default-label=master
# 如果仓库是私有的,需要配置用户名和密码
#spring.cloud.config.username=
#spring.cloud.config.password=
  • 启动类添加注解@EnableConfigServer
@SpringBootApplication
@EnableDiscoveryClient
@EnableConfigServer
public class ConfigServerApplication {

}
3.config client 开发

config client也就是一个个具有实际业务含义的微服务,例如order服务,user服务

  • 引入依赖
 <!-- config client -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-client</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 健康检查 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- consul 注册中心 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
  • 以gitee作为仓库,在gitee上新建仓库config-center

分别新建 configclient.properties、 configclient-dev.properties、 configclient-test.properties。

在实际开发中,建议以服务名命名,例如order-dev.properties/order-dev.yml
在这里插入图片描述
在这里插入图片描述

  • 项目中配置文件需要命名为bootstrap.properties/bootstrap.yml,容器启动时bootstrap.properties/bootstrap.yml命名会比application.properties/application.yml命名优先加载(先要去配置中心拉去配置到本地缓存)。

    bootstrap.properties 项目本地配置

    # 开启配置发现
    spring.cloud.config.discovery.enabled=true
    # 指定配置中心服务ID,去注册中心获取
    spring.cloud.config.discovery.service-id=CONFIG-SERVER
    
    # consul 注册中心地址
    spring.cloud.consul.host=localhost
    spring.cloud.consul.port=8500
    
    # 指定拉取配置文件的分支
    spring.cloud.config.label=master
    # 指定拉取配置文件的名称
    spring.cloud.config.name=configclient
    # 指定拉取配置文件的环境
    spring.cloud.config.profile=test
    

    测试代码

    @RestController
    public class ConfigController {
    
        @Value("${name}")
        private String name;
    
        @GetMapping("/demo")
        public String demo() {
            return name;
        }
    }
    

    如果命名为application.properties/application.yml,config client启动会报错,ConfigController无法注入name属性(配置文件信息还未加载到本地)

  • 启动类,引入config-client依赖即可,无需加额外注解

@SpringBootApplication
@EnableDiscoveryClient
public class ConfigClientApplication {

}

config server启动后,可以通过地址获取配置信息,例如:http://localhost:8555/configclient-dev.properties
在这里插入图片描述

配置信息= configclient.properties(默认会获取到) + configclient-dev.properties

4.手动配置刷新
- 当远端git仓库中配置发生变化时,不需要重启微服务,就可以读取到修改之后的最新配置信息
  • 1.在需要刷新的类上添加注解@RefreshScope
// 添加注解@RefreshScope,仅作用于当前类ConfigController的配置刷新
@RestController
@RefreshScope
public class ConfigController {

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

    @GetMapping("/demo")
    public String demo() {
        return name;
    }
}
  • 2.开启刷新端点
# 注意properties格式为*,yml格式为"*"
# /actuator/refresh端点默认是不开启的。"*"代表开启所有端点
management.endpoints.web.exposure.include=*
  • 3.修改完远端git仓库配置后,向需要刷新配置的微服务发送一个POST请求
- 使用post
http://localhost:8655/actuator/refresh

- 命令行终端
curl -X POST http://localhost:8655/actuator/refresh

在这里插入图片描述

5.Bus组件
- 官方文档: https://spring.io/projects/spring-cloud-bus

- spring cloud bus使用轻量级消息代理将分布式系统的节点连接起来。然后可以使用它来广播状态更改(例如配置更改)或其他管理命令。AMQP和kafka broker(中间件)实现包含在项目中。或者,在类路径上找到任何spring cloud stream绑定器都可以作为传输使用。

- bus称之为spring cloud中消息总线,主要用来在微服务系统中实现远端配置更新时,通过广播形式通知所有客户端刷新配置信息,避免手动重启服务来刷新配置
  • 实现配置刷新原理
    在这里插入图片描述

  • 安装RabbitMQ(todo)


http://www.kler.cn/a/132502.html

相关文章:

  • 讯飞、阿里云、腾讯云:Android 语音合成服务对比选择
  • 极速入门数模电路
  • SpringBoot配置相关的内容
  • git push时报错! [rejected] master -> master (fetch first)error: ...
  • Go 语言已立足主流,编程语言排行榜24 年 11 月
  • 【软件测试】一个简单的自动化Java程序编写
  • mac系统安装docker desktop
  • 微服务实战系列之Sentinel
  • 【风险管理】MT4外汇交易新手指南:掌握资金管理的重要性
  • [Windows Server 2019] 安装与配置邮件服务器
  • 9 STM32标准库函数 之 独立看门狗(IWDG)所有函数的介绍及使用
  • Python程序打包指南:手把手教你一步步完成
  • Es 拼音搜索无法高亮
  • Docker:深入探讨Kong开源API 网关的力量
  • applicationContext.getBean 为null
  • Python基础入门---conda 如何管理依赖包以及复制相同环境的
  • μC/OS-II---事件标志组管理1(os_flag.c)
  • Vue3 shallowRef 和 shallowReactive
  • WPF创建自定义控件编译通过但是找不到资源
  • Docker与Kubernetes结合的难题与技术解决方案
  • 2023.11.18 Hadoop之 YARN
  • 计算机毕业设计选题推荐-二手交易跳蚤市场微信小程序/安卓APP-项目实战
  • Python 的 @lru_cache() 装饰器
  • uniapp开发ios上线(在win环境下使用三方)
  • c#Nettonsoft.net库常用的方法json序列化反序列化
  • docker 部署mysql主从复制