-
Notifications
You must be signed in to change notification settings - Fork 495
Spring Cloud Tencent Router 使用文档
当 A 服务调用 B 服务时,先从注册中心获取全量 B 服务地址信息。当没有服务路由,直接进行负载均衡时,根据负载均衡算法从全量 B 服务地址中挑选一个服务实例发起服务调用。 当加入服务路由阶段后,挑选服务实例分为两个阶段:
- 阶段一:从全量服务地址中根据路由规则选取一批目标服务地址
- 阶段二:从阶段一选取的一批目标服务地址中,再根据负载均衡算法挑选一个实例
需要明确一下概念:
- 服务路由 :根据路由规则从全量实例列表中,挑选一部分实例
- 负载均衡 :根据负载均衡算法,从一批实例中挑选一个实例
服务路由具有广泛的使用场景,例如金丝雀发布、灰度发布、蓝绿发布、按机房收敛流量等。
在 Spring Cloud Hoxton
版本之前,Spring Cloud Netflix Ribbon 提供了负载均衡能力,不具备服务路由的能力。 Spring Cloud Tencent Router
则扩展了路由能力。Spring Cloud Tencent Router
集成了 Polaris 的路由功能,提供了开箱即用的路由能力。
本章节将介绍如何在 Spring Cloud 项目中使用 Spring Cloud Tencent Router 的功能。 完整 Example 代码请参考:polaris-router-example
搭建北极星服务请参考 Polaris Getting Started
腾讯云提供了免运维的北极星云服务,基于云服务可以快速开通生产级高可用北极星集群 了解更多
- 参考 Spring Cloud Tencent 版本管理 文档获取最新的版本号,引入 Spring Cloud Tencent Bom,例如:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-tencent-dependencies</artifactId>
<version>1.4.1-Hoxton.SR9</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
- 引入 Spring Cloud Tencent Router Starter
2.1 被调端只需要引入 spring-cloud-starter-tencent-polaris-discovery
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-starter-tencent-polaris-discovery</artifactId>
</dependency>
2.2 主调端需要同时引入 spring-cloud-starter-tencent-polaris-discovery
和 spring-cloud-starter-tencent-polaris-router
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-starter-tencent-polaris-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-starter-tencent-polaris-router</artifactId>
</dependency>
- 被调端服务 bootstrap.yml 配置文件中加入以下配置内容
服务路由最核心的能力是标签路由,通过给被调方打上一系列的标签,然后通过标签过滤被调实例。被调方可以通spring.cloud.tencent.metadata.content.label1=value1
形式打标。常见的标签信息,例如:机房标签、城市标签、版本号标签、蓝绿标签等
为了体验标签路由能力,您可以像 Example 中一样,启动两个被调端实例,分部设置不同的标签,例如一个实例 label1=value1,另外一个实例 label2=Value2
spring:
application:
name: ${application.name}
cloud:
tencent:
metadata:
content:
label1: value1
polaris:
address: grpc://${修改为第一步部署的 Polaris 服务地址}:8091
namespace: default
- 主调端服务 bootstrap.yml 配置文件中加入以下配置内容
主调端服务不需要打标
spring:
application:
name: ${application.name}
cloud:
polaris:
address: grpc://${修改为第一步部署的 Polaris 服务地址}:8091
所有服务启动成功后,到 Polaris 控制台查看服务信息,如下图所示:
- 被调端实例列表
- 被调端实例标签信息
- 主调端实例列表
通过主调端暴露的 Http 接口访问服务,在没有如何路由规则的情况下,会根据负载均衡算法调用到两个被调端实例。
假设我们让所有的服务调用都调到其中 label1=value1 的实例,那么我们只需要在被调端服务上创建一条路由规则即可。
注意:是在被调端服务上创建路由规则,而不是主调端
5.1 创建规则 按照表单项填写响应的内容,如下图所示,所有的请求都 100% 转发到 label1=value1 的实例。
5.2 提交规则 创建完路由规则之后,需要提交规则才能生效。
5.3 查看规则是否已经下发到主调端 路由规则会缓存到主调端的本地磁盘,所以可以通过本地磁盘上的缓存文件查看下发的路由规则。
再次请求主调端的 Http 接口,发现所有的请求都只会转发到 label1=value1 的实例。
添加如下代码即可使用北极星负载均衡:
@Bean
public IRule polarisRibbonRule() {
return new PolarisWeightedRandomRule();
}
- 您在使用过程中遇到任何问题,请提 Issue 或者加入我们的开发者群告诉我们,我们会在第一时间反馈
- Spring Cloud Tencent 社区期待您的加入,一个 Star、PR 都是对我们最大的支持
- 项目介绍
- 使用指南
- 最佳实践
- 开发文档
- 学习资料