共计 3744 个字符,预计需要花费 10 分钟才能阅读完成。
导读
注册核心是微服务最外围的组件,本文次要介绍应用 Spring Cloud Tencent 接入北极星注册核心。北极星注册核心具备服务高低线等能力,是一款十分好用的注册核心产品。
Github 地址:https://github.com/Tencent/sp…
模块简介
服务注册发现模块是 Spring Cloud Tencent 最外围的模块之一,实现了规范的 Spring Cloud Discovery SPI 接口(PolarisDiscoveryClient.java)。任何一个 Spring Cloud 规范利用都能疾速平滑的应用 Spring Cloud Tencent Discovery。
Spring Cloud Tencent Discovery 背地对接的是社区风行的对立服务发现和治理平台 Polaris
疾速入门
本章节将介绍如何在 Spring Cloud 我的项目中应用 Spring Cloud Tencent Discovery 的性能。
残缺 Example 代码请参考:polaris-discovery-example
第一步:引入 Polaris 服务端
形式一:搭建本地北极星服务
搭建北极星服务请参考 Polaris Getting Started
形式二:应用北极星开源提供的体验环境
-
Console Address : http://14.116.241.63:8080/
- Username: polaris
- Password: polaris
- Server Address:
grpc://183.47.111.80:8091
形式三:应用腾讯云北极星服务
腾讯云提供了免运维的北极星云服务,基于云服务能够疾速开明生产级高可用北极星集群 理解更多
第二步:引入 Spring Cloud Tencent Discovery 依赖
- 参考 Spring Cloud Tencent 版本治理 文档获取最新的版本号,引入 Spring Cloud Tencent Bom,例如:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-tencent-dependencies</artifactId>
<version>1.5.0-Hoxton.SR9</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
- 引入 Spring Cloud Tencent Discovery Starter
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-starter-tencent-polaris-discovery</artifactId>
</dependency>
第三步:减少 Spring Cloud Tencent Discovery Starter 的配置文件
- 在您的 bootstrap.yml 配置文件中退出以下配置内容
spring:
application:
name: ${application.name}
cloud:
polaris:
address: grpc://${批改为第一步部署的 Polaris 服务地址}:8091
namespace: default
第四步:启动利用
利用胜利启动后,到 Polaris 控制台查看服务注册信息。如下图所示:
到此接入 Spring Cloud Tencent Discovery 即已实现。
拓展应用
元数据
元数据定义
服务实例通常带有一系列的标签信息,例如实例所属的机房信息、地区信息、环境信息等,这些信息统称为服务实例的元信息。实例注册到注册核心时,会带上本身的元数据信息。当生产方从注册核心获取到实例时,既能够同时获取到每个实例的元信息。
<img width=”1013″ alt=”image” src=”https://user-images.githubusercontent.com/4991116/170854608-cb3d0e1b-217e-411f-9773-0bf8574356bc.png”>
元数据起源
起源一:我的项目里的配置文件
在 Spring Cloud 我的项目里的 application.yml 中配置以下内容:
spring:
cloud:
tencent:
metadata:
content:
idc: shanghai
env: dev1
利用在启动注册时,会主动读取配置文件并带上 idc=shanghai
和 env=dev1
两个元数据信息。
通过配置文件的形式为最间接的形式,然而这种形式有一个最大的弊病,就是设置不同元数据值时须要从新编译打包。实质上的起因就是:大部分的元数据信息属于部署环境的信息或者叫机器的信息,而不是利用动态代码的信息。
起源二:利用启动参数
家喻户晓,Spring Boot 利用配置文件定义的配置项都能够通过 -D 启动参数笼罩,例如通过以下形式笼罩 env 值为 dev2:
Java -jar -Dspring.cloud.tencent.metadata.content.env=dev2 demo.jar
通过启动参数的形式,能够在启动时动静批改元数据信息,而不必从新打包,从而解决了形式一的弊病。
然而这种形式也有弊病,就是谁负责批改启动脚本,加上 -D 参数呢?
大部分状况下,Java -jar
启动命令都放在我的项目里的 start.sh
脚本里,那也就是说,每次须要减少 -D 参数都要批改 start.sh
,这自身也会减少保护老本。
起源三:环境变量
环境变量的形式则齐全跟运行的利用解耦,是完完全全的机器信息。Spring Cloud Tencent 约定了前缀 SCT_METADATA_CONTENT_
的环境变量为利用的元数据信息。例如:
SCT_METADATA_CONTENT_IDC=shanghai
SCT_METADATA_CONTENT_ENV=dev1
利用在启动时,则会主动携带 IDC=shanghai
和 ENV=dev
的元数据。
通过环境变量的形式,paas 平台在拉起一台虚拟机或者一个容器 Pod 时,只须要设置相应的环境变量即可。而利用本身无需做任何其它事件。
以上几种形式,能够通过查看启动日志确认是否正确打标:
grep "Loaded static metadata info" xx.log
起源四:自定义实现 SPI(待实现)
后面三种形式为 SCT(Spring Cloud Tencent 的缩写)内置的形式,然而并不一定合乎每个公司本人的标准或者实现。例如:
- 把元数据放到机器上的某一个配置文件里,例如 /etc/metadata
- 启动时,调用 CMDB 的接口获取元信息
所以 SCT 定义了一个 SPI,不便用户本人实现元数据起源。SCT 在注册前,回调 SPI 获取元数据信息,并注册到注册核心。
控制台调整实例的权重、下线实现等操作
如下图所示,能够在管制台上对实例进行一系列管控操作,例如隔离实例,调整实例权重等。
自定义参数
除了控制台页面能够调整参数以外,Spring Cloud Tencent Discovery 提供了很多自定义参数满足各类场景。以权重随机策略为例,您能够在我的项目里的 bootstrap.yml 配置文件里配置 spring.cloud.polaris.weight
既能够调整权重值(默认为 100)。
残缺的的配置列表如下
配置项 Key | 默认值 | 是否必填 | 配置项阐明 |
---|---|---|---|
spring.cloud.polaris.address | 无 | 是 | Polaris 后端地址 |
spring.cloud.polaris.namespace | default | 否 | 服务所在的命名空间名称 |
spring.cloud.polaris.service | ${spring.application.name} | 否 | 服务名称 |
spring.cloud.polaris.local-ip-address | 无 | 否 | 注册的 IP 地址,默认状况下 Spring Boot 会主动获取 IP 地址无需指定 IP 地址,当须要自定义 IP 地址时才须要设置 |
spring.cloud.polaris.discovery.enabled | true | 否 | 是否开启服务发现 |
spring.cloud.polaris.discovery.register | true | 否 | 是否开启服务注册 |
spring.cloud.polaris.discovery.instance-enabled | true | 否 | 以后微服务实例是否能够被拜访 |
spring.cloud.polaris.discovery.token | 无 | 否 | 鉴权 Token |
spring.cloud.polaris.discovery.version | null | 否 | 微服务版本 |
spring.cloud.polaris.discovery.protocol | null | 否 | 微服务协定类型 |
spring.cloud.polaris.discovery.weight | 100 | 否 | 微服务权重 |
spring.cloud.polaris.discovery.service-list-refresh-interval | 60000 | 否 | 服务列表刷新距离(毫秒) |