摘要:第一章节我们先说说基本概念,然后说一下配置的使用及服务发现与注册整合过程。
1、Spring Cloud Tencent 是什么?
Spring Cloud Tencent is a open source one-stop microservice solution from Tencent.
口头翻译:Spring Cloud Tencent 是腾讯开源的微服务一站式解决方案。
Spring Cloud Tencent implements the Spring Cloud standard microservice SPI, so developers can quickly develop Spring Cloud cloud-native distributed applications based on Spring Cloud Tencent.
口头翻译:Spring Cloud Tencent 实现了Spring Cloud 标准的微服务SPI,因此开发者可以快速的通过Spring Cloud Tencent 实现云端或本地化的分布式服务。
The core of Spring Cloud Tencent relies on Tencent's open-source one-stop service discovery and governance platform Polaris to realize various distributed microservice scenarios.
口头翻译:Spring Cloud Tencent 的核心依赖于腾讯开源的一站式服务发现与治理平台“Polaris”【北极星】,适用于多样化的分布式微服务场景。
综上,我们可以得出结论,Spring Cloud Tencent 是一套微服务快速开发及服务生态治理的平台框架。
2、Spring Cloud Tencent 能干什么?
首先我们来看一下Spring Cloud Tencent 的功能架构图。
Spring Cloud Tencent 具备哪些能力?
- 服务注册与发现
- 服务动态配置中心
- 服务治理
- 服务路由
- 服务限流
- 熔断保护
- 元数据传输服务
3、整合过程
3.1、环境准备
3.1.1、Polaris安装(单机版)
安装教程请参考,相关说明如下:
北极星单机版包含以下4个组件:
- polaris-console:可视化控制台,提供服务治理管控页面
- polaris-server:控制面,提供数据面组件及控制台所需的后台接口
- prometheus:服务治理监控所需的指标汇聚统计组件
- pushgateway:prometheus推送网关,支持数据面通过推送方式上报监控数据到prometheus
北极星单机版默认占用以下端口:
- polaris-console:8080(http/tcp)
- polaris-server:8090(http/tcp,注册中心端口)、8091(grpc/tcp,注册中心端口)、8093(grpc/tcp,配置中心端口)
- prometheus:9090(tcp)
- pushgateway:9091(tcp)
单机版北极星,所有的组件都安装在用户机器上,作为多个独立进程提供服务。
部署完成后我的服务信息如下表
IP | 端口 | 协议 | 说明 |
81.68.217.121 | 8080 | http/tcp | polaris-console管理后台 |
81.68.217.121 | 8090,8091,8093 | http/tcp | 8090(http/tcp,注册中心端口)、8091(grpc/tcp,注册中心端口)、8093(grpc/tcp,配置中心端口) |
81.68.217.121 | 9090,9091 | tcp | prometheus:9090(tcp),pushgateway:9091(tcp) |
安装成功后登录管理后台http://ip:8080,如下图,默认用户名密码为polaris/polaris
登录后界面如下图,如要是按照整体架构的功能进行菜单布局的,所以也是比较清晰的。
3.2、项目搭建与整合
整合版本说明
组件 | 版本 | 备注 |
spring boot | 2.6.7 | |
spring cloud | 2021.0.2 | |
spring cloud tencent | 1.5.3-2021.0.2 |
3.2.1、项目搭建
为了验证服务注册与发现,所以我们服务至少要有两个模块,一个服务提供方,一个服务消费方,所以我准备了项目代码,项目模块说明如下图及下表。
模块 | 说明 | 备注 |
cloud-service-provider | 服务提供方 | |
cloud-servier-consumer | 服务消费方 |
3.2.2、引入依赖
- 在父项目spring-cloud-tencent-parent的pom.xml文件中引入如下依赖
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-tencent-dependencies</artifactId>
<version>1.5.3-2021.0.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
- 在子项目中cloud-service-provider和cloud-service-consumer中增加服务发现及配置相关依赖
<!--服务发现依赖-->
<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-config</artifactId>
</dependency>
3.2.3、服务提供方
在服务提供方中增加一个服务接口/provider/sayHello,代码如下,在响应结果中增加一个serverPort端口变量,用于测试负载均衡效果。
/**
* @program: spring-cloud-tencent-parent
* @description: 测试类
* @author: Jian Jang
* @create: 2022-07-05 16:18:33
* @blame BOSS Team
*/
@RestController
@RequestMapping("provider")
publicclassHelloController {
@Value("${server.port}")
privateintserverPort;
@PostMapping("/sayHello")
publicJSONObjectsayHello(@RequestBodyJSONObjectparam) {
JSONObjectdata=newJSONObject();
data.put("code", "000000");
data.put("message", "hello from:"+serverPort);
data.put("data", param);
returndata;
}
}
配置文件,在cloud-service-provider模块中的bootstrap.yml配置文件中,增加注册中心配置,如下
spring:
application:
name: cloud-service-provider
cloud:
polaris:
address: grpc://81.68.217.121:8091
namespace: jianjang-space
3.2.4、服务消费方
在服务消费方增加调用服务提供方的接口,便于测试使用
/**
* @program: spring-cloud-tencent-parent
* @description: 服务调用
* @author: Jian Jang
* @create: 2022-07-05 16:39:34
* @blame BOSS Team
*/
@RefreshScope
@RestController
@RequestMapping("consumer")
publicclassHelloController {
@Resource
privateRestTemplateUtilsrestTemplateUtils;
@Value("${service.provider.url}")
privateStringproviderServerUrl;
@Value("${hello.name}")
privateStringhelloName;
@RequestMapping(value="/hello",method= {RequestMethod.GET,RequestMethod.POST})
publicJSONObjecthello(@RequestParamStringname) {
JSONObjectparam=newJSONObject();
param.put("name", name);
param.put("name2",helloName);
returnparam;
}
@RequestMapping(value="/call",method= {RequestMethod.GET,RequestMethod.POST})
publicJSONObjectcall(@RequestParamStringname) {
JSONObjectparam=newJSONObject();
param.put("name", name);
returnrestTemplateUtils.post(providerServerUrl+"/provider/sayHello", param);
}
}
配置文件,在cloud-service-consumer模块中的bootstrap.yml配置文件中,增加注册中心配置,如下。
server:
port: 8081
spring:
application:
name: cloud-service-consumer
cloud:
polaris:
address: grpc://81.68.217.121:8091
namespace: jianjang-space
config:
groups:
- name: ${spring.application.name}# 选填,注入自定义配置的配置分组
files: ["config/cloud-service-consumer.yml"]# 注入自定义配置文件列表,当 key 冲突时,排在前面的配置文件优先级高于后面
service:
provider:
url: http://cloud-service-provider/
3.3、验证
验证包括两个过程,一是验证服务注册与发现,二是验证配置中心功能
3.3.1、服务注册与发现
通过maven打包服务提供者,然后打开两个控制台窗口进入到jar包产物所在目录,通过如下命令启动两个服务提供方,端口分别为8101和8102。
java -jar cloud-service-provider.jar --spring.profiles.active=dev
java -jar cloud-service-provider.jar --spring.profiles.active=dev2
登录北极星控制台查看服务列表可以看到服务注册成功如下图
消费者服务启动
java -jar cloud-service-consumer.jar
北极星管理后台查看注册情况如下图
3.3.2、服务验证
通过postman调用消费方接口,远程调用服务提供方,并验证是否具备负载均衡能力,验证结果如下图。
3.3.3、动态配置
推荐的最佳实践是在北极星管控端创建一个名为当前应用名( ${spring.application.name}
) 的配置分组,Spring Cloud Tencent Config 会自动注入当前应用名分组下的
application-${activeProfile}.properties
application-${activeProfile}.yml
application.properties
application.yml
bootstrap-${activeProfile}.properties
bootstrap-${activeProfile}.yml
bootstrap.properties
bootstrap.yml
优先级从上到下依次降低
注意:是 yml 后缀,而不是 yaml
自动注入以上配置文件符合 Spring Boot 的规范,能够满足绝大部分应用场景了。只有当您需要注入额外自定义的配置文件时,才需要在 bootstrap.yml
里配置 spring.cloud.polaris.config.groups
,如下所示:
在cloud-service-consumer中增加配置中心接入,配置如下
spring:
application:
name: cloud-service-consumer
cloud:
polaris:
address: grpc://81.68.217.121:8091
namespace: jianjang-space
config:
groups:
- name: ${spring.application.name} # 选填,注入自定义配置的配置分组
files: [ "config/cloud-service-consumer.yml"] # 注入自定义配置文件列表,当 key 冲突时,排在前面的配置文件
首先在北极星平台jianjang-space空间下增加分组cloud-service-consumer。
新增配置config/cloud-service-consumer.yml
说明:使用过程同样通过@Value或者@ConfigurationProperties进行注入,然后通过@RefreshScope进行自动刷新。
3.3.4、配置验证
通过postman调用http://localhost:8081/consumer/hello接口进行验证,变更文件cloud-service-consumer.yml中的配置的hello.name的值,然后发布,无需重启服务,验证是否可以动态刷新。验证过程,略。
以上就是Spring Cloud Tencent 的服务发现,配置中心相关功能的尝鲜过程。高级功能限流,熔断,网关等更多功能,我们下期再做讲解。