sc-config:获取 Resource 的端点

这是我参与更文挑战的第 12 天,活动详情查看: 更文挑战

《配置中心 Spring Cloud Config 详解》系列文章更新,一起在技术的路上精进!本系列文章将会介绍Spring Cloud 中提供了分布式配置中心Spring Cloud Config。应用服务中除了实现系统功能的代码,还需要连接资源和其它应用,经常有很多需要在外部配置的数据去调整应用的行为,如切换不同的数据库,设置功能开关等。随着微服务的不断增加,需要系统具备可伸缩和可扩展性,除此之外就是管理相当多的服务实例的配置数据。在应用的开发阶段由各个服务自治,但是到了生产环境之后会给运维带来很大的麻烦,特别是微服务的规模比较大,配置的更新更为麻烦。为此,系统需要建立一个统一的配置管理中心。

在前面的文章,我们进一步介绍了 Spring Cloud Config 服务端内置了一些对外查询配置的 API 端点。本文将会介绍获取 Resource 的端点。

获取 Resource 的端点

Resource 提供的 API 端点实现其实有些类似 Environment 端点的实现,在此我们仅简单介绍。

  • /{name}/{profile}/{label}/**
  • /{name}/{profile}/**

具体对应到URI为/config-client/dev/master/config-client-dev.yml。

获取资源文件的时序图

获取资源文件的过程和获取环境变量的过程类似,不同的是,当返回的是一个指定的配置文件时,Resource控制器默认会将文件中的占位符替换,这需要调用环境仓储的实现类,最后将替换后的资源文件返回给客户端。

Resource控制器和EnvironmentController的初始化过程类似,ResourceController控制器依赖的获取资源文件的EnvironmentRepository也是“Encryptor”代理类,会将解密后的属性值返回给客户端应用。

public class ResourceController {
	@RequestMapping("/{name}/{profile}/{label}/**")
	public String retrieve(@PathVariable String name, @PathVariable String profile,
			@PathVariable String label, HttpServletRequest request,
			@RequestParam(defaultValue = "true") boolean resolvePlaceholders)
			throws IOException {
		String path = getFilePath(request, name, profile, label);
		return retrieve(name, profile, label, path, resolvePlaceholders);
	}

	synchronized String retrieve(String name, String profile, String label, String path,
			boolean resolvePlaceholders) throws IOException {
		...
		try (InputStream is = this.resourceRepository.findOne(name, profile, label, path)
				.getInputStream()) {
			String text = StreamUtils.copyToString(is, Charset.forName("UTF-8"));
			if (resolvePlaceholders) {
				Environment environment = this.environmentRepository.findOne(name,
						profile, label);
				text = resolvePlaceholders(prepareEnvironment(environment), text);
			}
			return text;
		}
	}
}
复制代码

#getFilePath 方法没有列出,其作用是将请求的URI截取出path属性。获取具体应用的资源文件#findOne,需要应用名、profile、label和文件名,根据这些参数便可以得到相应的资源文件,Resource流转换成字符串返回给客户端。默认会将资源文件中的系统环境变量占位符进行替换。

小结

本文主要介绍了 Spring Cloud Config 服务端内置了一些获取 Resource 的端点及其实现,Resource提供的API端点实现其实有些类似Environment端点的实现。

下一篇文章,我们将开始介绍 Spring Cloud Config 客户端的具体实现。Spring Boot 的应用能够立刻体验 Spring Cloud Config Server 带来的优势,而且还能够获取与环境变化事件有关的特性。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享