Springcloud Config配置中心使用与相关介绍
作者:扎哇太枣糕 发布时间:2021-07-13 05:15:17
Springcloud Config
什么是springcloud Config
  简单来说,Spring Cloud Config就是我们通常意义上的配置中心,也就是微服务项目中,每一个微服务都需要配置相应的配置,如果不同服务的配置文件有相同的配置,如果这些相同配置需要修改的话就要全都修改一遍。如果使用springcloud Config的话就可以把原本放在本地文件的配置抽取出来放在中心服务器,从而能够提供更好的管理、发布能力。
  Config分为服务端和客户端,服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访接口。客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容
config服务端的配置使用
  第一步: 外部config需要结合git使用,于是需要在github或者gitee创建一个仓库,仓库里全都是各种配置文件,git远程仓库的创建这里就不多加赘述,创建完成之后需要获取到仓库的链接
  第二步: 引入相关依赖
<!--Config服务端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
  第三步: 配置文件配置远程仓库地址
server:
port: 3344spring:
application:
name: cloud-config-center #注册进Eureka服务器的微服务名
cloud:
config:
server:
git:
uri: https://gitee.com/mereign/springcloud-config.git #GitHub或者Gitee上面的git仓库名字
search-paths: #搜索目录
- springcloud-config
label: master #读取分支
#启动成功后访问的路径 http://ip:3344/{label}/{application}-{profile}.yml 能访问的配置文件 就表示成功了eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
  启动配置中心微服务模块,但是有些小伙伴会遇到这个异常Authentication is required but no CredentialsProvider has been registered,原因是你的远程仓库创建的私有的未开源,解决方案有两种,一来就是把仓库修改为开源仓库,还有就是使用下面的方法配置你github或者Gitee的用户名和密码
spring:
application:
name: cloud-config-center #注册进Eureka服务器的微服务名
cloud:
config:
server:
git:
uri: https://gitee.com/mereign/springcloud-config.git #GitHub或者Gitee上面的git仓库名字
username: 自己的github或者Gitee用户名
password: 自己的github或者Gitee密码
  第四步: 主程序类使用@EnableConfigServer注解标注Config服务端
配置好了之后启动微服务,可以使用url链接直接读取文件里的内容
config客户端的相关问题
config客户端的配置使用
  第一步: 引入相关依赖,这里客户端的依赖与服务端有所不同
<!--Config服务端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
  第二步: 配置文件,这里的客户端的配置文件与之前的有所不同,命名为bootstrap.yml,主要区别为applicaiton.yml是用户级的资源配置项,而bootstrap.yml是系统级的,优先级更加高
server:
port: 3355spring:
application:
name: config-client
cloud:
config:
uri: http://localhost:3344 #配置中心的地址
label: master #分支名称
name: config #配置文件名称
profile: dev #读取后缀名称 上述三个综合http://localhost:3344/master/config-dev.yml#服务注册到eureka地址
eureka:
client:
service-url:
#设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
defaultZone: http://localhost:7001/eureka #单机版
  经过上述配置,等服务启动开的时候,会3355服务端会到3344服务端获取config-dev的配置内容,3344服务端再来连接配置的GitHub或者Gitee仓库从而获取config-dev的配置内容
  第三步: 主程序类只需要标注eureka客户端即可,无需标注config客户端
  第四步: 服务端的url链接形式获取内容,而客户端需要使用REST接口的形式获取指定配置信息
@RestController
public class ConfigController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/configInfo")
public String getConfigInfo() {
return configInfo;
}
}
启动主程序类(要先启动注册中心eureka再启动config服务端,最后才能启动config客户端),然后访问controller中的接口即可获得相应的配置信息
动态刷新问题
  当远程仓库的配置修改之后,服务端通过url链接的形式获取内容是更新之后的,但是客户端使用REST接口的形式获取到的配置信息则是更新之前的,只有重启config服务端微服务才能通过客户端接口访问到更新之后的配置信息。
  为了解决上述的问题,可以使用动态刷新配置服务端微服务,避免每次配置更新都需要重启微服务才能获取最新配置的痛点
  第一步: 引入actuator监控技术依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  第二步: bootstrap.yml文件中暴露服务端点,可以让这个服务处于可被监控状态
# 暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
  第三步: 在controller类上加@RefreshScope注解
  第四步: 发送post请求,手动刷新3355服务端的监控,这样才能刷新config服务端获取的配置信息
curl -X POST "http://localhost:3355/actuator/refresh
  第五步: 到此为止就config服务端就可以访问到远程仓库中最新的配置信息了
config客户端的遗留问题
  config客户端动态刷新解决了微服务每次都要重启才能获取最新配置信息的问题,但是,如果config客户端有很多呢?每次远程仓库配置修改都需要使用post请求手动刷新所有的服务吗?是不是也很麻烦,那么是否可以使用广播的形式,一次通知处处生效,大范围的自动刷新,定制化的指定服务刷新?那就用到了下一篇博客学习的消息总线——springcloud Bus
来源:https://blog.csdn.net/qq_59138417/article/details/126648615


猜你喜欢
- 一、关于Spring Cache缓存在现在的应用中越来越重要,Spring从3.1开始定义了org.springframework.cach
- 前言大家都知道在Android WebView使用中,经常需要H5页面和Native页面进行交互,比如在网页上点击分享按钮,调用本地分享接口
- 本文实例为大家分享了Android自定义EditText实现登录界面的具体代码,供大家参考,具体内容如下先看效果图:自定义edittext
- 有项目需求需要绘制多个圆圈,并且使用连续的数字对其排列起来,也就是好多排的圆圈。首先看一下效果图:一排设置为8个,一共有53个的:一排设值为
- 发现问题:之前用springAOP做了个操作日志记录,这次在往其他类上使用的时候,service一直注入失败,找了网上好多内容,发现大家都有
- 目录基于Java的guava开源库工具类1、guava的maven配置引入 2、LoadingCache3、Multimap 和
- 1. Spring Boot Condition功能与作用@Conditional是基于条件的自动化配置注解, 由Spring 4框架推出的
- Spring depends-on的使用通过在XML中的<bean>里配置depends-on属性或者在一个类上使用注解@Dep
- 使用Collections.sort对中文进行排序使用collections.sort(List list, Comparator <
- 目录堆内存溢出原因:解决方案:栈内存溢出原因:解决方案:方法区和运行时常量池内存溢出原因:本机直接内存溢出原因:解决方案:元空间内存溢出原因
- java 方法签名,我想做java 开发的朋友也知道,方法签名的重要性,是方法重载的一个比较好的解释,尤其是在后续优化方面,这里记录下,有看
- XML的特点是功能全面,但标签繁琐,格式复杂。在Web上使用XML现在越来越少,取而代之的是JSON这种数据结构。JSON是JavaScri
- POST接口formdata传参模板记录var res = ""; HttpClient _httpClient = n
- 1、@Valid与@Validated的区别1.1 基本区别@Valid:Hibernate validation校验机制@Validate
- /// <summary> /// 通过IP得到IP所在地省市(Po
- 实践过程效果代码public partial class Form1 : Form{ public Form1()
- 前言请看下面几个问题Spring为什么不推荐使用@Autowired 注解?为什么推荐使用@Resource 代替&nb
- 前言事务对java开发的同学来说并不陌生,我们使用事务的目的在于避免产生重复数据或者说利用数据存储中间件的事务特性确保数据的精准性,比如大家
- import java.lang.reflect.InvocationHandler;import java.lang.reflect.Me
- C语言 strcmp() 函数用于对两个字符串进行比较(区分大小写)。头文件:string.h语法/原型:int strcmp(const