分享免费的编程资源和教程

网站首页 > 技术教程 正文

一文带你弄明白Spring Cloud Config的配置中心,还不赶快来学

goqiw 2024-11-27 13:58:36 技术教程 7 ℃ 0 评论

Config配置中心

在采用分布式微服务架构的系统中,由于服务数量众多,为了方便服务配置文件的统一管理,需要分布式配置中心组件。如果分散管理各个服务的配置,那么上线之后的配置如何保持一致将会是一个很让人头疼的问题。

因此,各个服务的配置定然需要集中管理。Spring Cloud Config配置中心是一个比较好的解决方案。使用Spring Cloud Config配置中心涉及两部分内容:

(1)config-server:服务端配置。

(2)config-client:客户端配置。

config-server服务端组件

通过Spring Cloud构建一个config-server服务大致需要3步。首先,在pom.xml中引入spring-cloud-config-server依赖,如下所示:

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

其次,在所创建的Spring Boot程序的启动类上添加@EnableConfigServer注解,开启Config Server服务,代码如下:

@EnableConfigServer
@SpringBootApplication
public class Application {
 public static void main(String[] args) {
 new SpringApplicationBuilder(Application.class).
web(true).run(args);
 }
}

最后,设置属性文件的位置。Spring Cloud Config提供本地存储配置的方式。在bootstrap启动属性文件中,设置属性spring.profiles.active=native,并且设置属性文件所在的位置,如下所示:

server:
 port: 7788 #配置中心端口
spring:
 application:
 name: config-server #服务名称
 profiles:
 active: native #设置读取本地配置文件
 cloud:
 config:
 server: native:
 searchLocations: classpath:config/ #声明本地配置文件的存放位置

配置说明:

(1)spring.profiles.active=native,表示读取本地配置,而不是从Git读取配置。

(2)search-locations=classpath:config/,表示查找文件的路径,在类路径的config下。

服务端的配置文件放置规则:在配置路径下,以{label}/{application}-{profile}.properties的命令规范放置对应的配置文件。上面的实例放置了以下配置文件:

/dev/crazymaker-common.yml
/dev/crazymaker-db.yml
/dev/crazymaker-redis.yml

以上文件分别对通用(common)、数据库(db)、缓存(redis)的相关属性进行设置。作为示例,缓存(redis)的配置如下:

spring:
 redis:
 blockWhenExhausted: true #链接耗尽时是否阻塞
 database: 0 #指定Redis数据库
 host: ${SCAFFOLD_REDIS_HOST:localhost} #Redis主机IP
 maxIdle: 100 #最大空闲连接数
 maxTotal: 2000 #最大连接数
 maxWaitMillis: 60000 #获取链接最大等待毫秒数
 minEvictableIdleTimeMillis: 1800000 #最小空闲时间
 numTestsPerEvictionRun: 1024 #每次释放链接的最大数目
 password: ${SCAFFOLD_REDIS_PSW:123456} #密码,如果没有设置密码,这个配置就可以不设置
 port: 6379 #Redis端口
 softMinEvictableIdleTimeMillis: 10000 #链接空闲多久后释放
 testOnBorrow: false #在使用时检查有效性
 testWhileIdle: true #获取链接时检查有效性
 timeBetweenEvictionRunsMillis: 30000 #释放链接的扫描间隔(毫秒)
 connTimeout: 6000 #链接超时毫秒数
 readTimeout: 6000 #读取超时毫秒数

Config配置中心启动之后,可以使用以下地址格式直接访问加载好的配置属性:

http://${CONFIG-HOST}: ${CONFIG-PORT}/{application}/{profile}[/{label}]

例如,通过地址

http://192.168.233.128:7788/crazymaker/redis/dev访问示例中配置的缓存的相关属性,如图2-11所示。

特别说明:Spring Cloud Config-Server支持多种配置方式,比如Git、Native、SVN等。虽然官方建议使用Git方式进行配置,但是这里没有重点介绍Git方式,而是使用了本地文件的方式,有以下3个原因:

(1)对于学习或者一般的开发来说,本地文件的配置方式更简化。

(2)生产环境建议使用Nacos,其具备注册中心和配置中心相结合的功能,更加方便与简单。

(3)掌握了Native的配置方式之后,对于Git的配置方式就能触类旁通。

config-client客户端组件

客户端config-client同config-server一样,需要新增springcloud-starter-eureka的依赖用来注册服务,然后增加spring-cloudstarter-config依赖引入配置相关的JAR包。

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

在bootstrap.properties中,按如下规则增加客户端配置的映射规则:

spring.cloud.config.label:dev #对应服务端规则中的{label}部分
spring.application.name:crazymaker #对应服务端规则中的{application}部分
spring.cloud.config.profile:redis #对应服务端规则中的{profile}部分
spring.cloud.config.uri:http://${CONFIG-HOST}:7788/ #配置中心config-server独立的uri地址

效果如图2-12所示。

如果是与Eureka的客户端配合使用,那么建议开启配置服务的自动发现机制,使用如下配置:

spring.cloud.config.discovery.enabled: true
spring.cloud.config.discovery.service-id: config-server

配置中心的两种发现机制不能同时存在,二者选其一即可。

客户端config属性的相关配置只有配置在bootstrap.properties(或bootstrap.yml)中,config部分的内容才能被正确加载,原因是config的相关配置必须早于application.properties,而bootstrap.properties的加载也早于application.properties。

本文给大家讲解的内容是Spring Cloud Config配置中心

  1. 下篇文章给大家讲解的是微服务的RPC远程调用;
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表