使用场景
元数据概念:服务实例通常带有一系列的标签信息,例如实例所属的机房信息、地域信息、环境信息等,这些信息统称为服务实例的元数据。实例元数据通常也叫实例标签。
使用场景:
实例注册到注册中心时,会带上自身的元数据信息。当消费方从注册中心获取到实例时,既可以同时获取到每个实例的元信息。
![](https://qcloudimg.tencent-cloud.cn/image/document/1210f371b4ab05b5fc1d7db7c52c9959.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/1210f371b4ab05b5fc1d7db7c52c9959.png)
通过元数据路由的能力,将指定特征的流量转发至指定特征的服务实例上,可用于灰度发布等场景。
![](https://qcloudimg.tencent-cloud.cn/image/document/fa230c883d87d140d7d73cd5a6616fae.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/fa230c883d87d140d7d73cd5a6616fae.png)
操作步骤
设置元数据信息
为服务实例设置元数据的方法主要有以下四种,您可根据实际情况选择最适合的方式即可。如您同时通过几种方式设置,则生效优先级为:自定义SPI > 环境变量 > 启动参数 > 应用配置。云控制台设置的标签和客户端标签不冲突的情况下同时存在,若key相同的情况下,取最新的数据值。
方案1:通过腾讯云控制台设置
1. 登录 TSE 控制台。
2. 单击左侧导航栏点击服务管理,选择目标地域和目标引擎实例,进入服务管理页面。
![](https://qcloudimg.tencent-cloud.cn/image/document/b2ca3a255156256579f96275ee552ceb.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/b2ca3a255156256579f96275ee552ceb.png)
3. 单击目标服务名,进入服务详情页。单击目标实例的编辑按钮,即可添加或修改目标实例的元数据信息。
![](https://qcloudimg.tencent-cloud.cn/image/document/c8950aed6ee17ae2edcd1d3360eabb4e.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/c8950aed6ee17ae2edcd1d3360eabb4e.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/324ac00d9c78a2224bc1404c62d1963f.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/324ac00d9c78a2224bc1404c62d1963f.png)
方案2:通过项目配置文件设置
在 Spring Cloud 项目里的 application.yml 中配置元数据信息,如下示例中设置idc=shanghai,env=dev1的两个元数据。应用在启动注册时,会自动读取配置文件并带上 idc=shanghai 和 env=dev1 两个元数据信息。
spring: cloud: tencent: metadata: content: idc: shanghai env: dev1
方案3:通过应用启动参数设置
Spring Boot/Spring Cloud 应用配置文件定义的配置项都可以通过 -D 启动参数设置,例如通过以下方式覆盖 env 值为 dev2 :
Java -Dspring.cloud.tencent.metadata.content.env=dev2 -jar demo.jar
方案4:通过环境变量设置
环境变量的方式完全跟运行的应用解耦。Spring Cloud Tencent 约定了前缀 SCT_METADATA_CONTENT_ 的环境变量为应用的元数据信息。例如:
SCT_METADATA_CONTENT_IDC=shanghai SCT_METADATA_CONTENT_ENV=dev1
方案5:自定义实现SPI
前面三种方式为 SCT(Spring Cloud Tencent 的缩写) 内置的方式,但是并不一定符合每个公司自己的规范或者实现。例如:
把元数据放到机器上的某一个配置文件里,例如 /etc/metadata。
启动时,调用 CMDB 的接口获取元信息。
所以 SCT 定义了 InstanceMetadataProvider SPI,支持通过实现内部提供的接口来进行读取,开发者可以实现相关的方法,提供对应的元数据,方便用户自己实现元数据来源。SCT 在注册前,回调 SPI 获取元数据信息,并注册到注册中心。示例代码:
@Component public class CustomMetadata implements InstanceMetadataProvider { @Override public Map<String, String> getMetadata() { Map<String, String> metadata = new HashMap<>(); metadata.put("k1", "v1"); return metadata; } @Override public String getZone() { return "shenzhen-zone-1"; } }
查看元数据信息
1. 登录 TSE 控制台。
2. 单击左侧导航栏的服务管理,选择目标地域和目标引擎实例,进入服务管理页面。
![](https://qcloudimg.tencent-cloud.cn/image/document/b25f3a3178dde6dfb371ed12147c4dea.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/b25f3a3178dde6dfb371ed12147c4dea.png)
3. 单击目标服务名,进入服务详情页。展开目标实例左侧三角图标,即可查看实例标签(元数据)信息。
![](https://qcloudimg.tencent-cloud.cn/image/document/13d7c3cc2163014dfcd10ff1cf7f2f00.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/13d7c3cc2163014dfcd10ff1cf7f2f00.png)