Spring Cloud Tencent 尝鲜《一》

167 阅读5分钟

摘要:第一章节我们先说说基本概念,然后说一下配置的使用及服务发现与注册整合过程。

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 的功能架构图。

image

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.1218080http/tcppolaris-console管理后台
81.68.217.1218090,8091,8093http/tcp8090(http/tcp,注册中心端口)、8091(grpc/tcp,注册中心端口)、8093(grpc/tcp,配置中心端口)
81.68.217.1219090,9091tcpprometheus:9090(tcp),pushgateway:9091(tcp)

安装成功后登录管理后台http://ip:8080,如下图,默认用户名密码为polaris/polaris

image.png

登录后界面如下图,如要是按照整体架构的功能进行菜单布局的,所以也是比较清晰的。

image-20220706100054710

3.2、项目搭建与整合

整合版本说明

组件版本备注
spring boot2.6.7
spring cloud2021.0.2
spring cloud tencent1.5.3-2021.0.2

3.2.1、项目搭建

为了验证服务注册与发现,所以我们服务至少要有两个模块,一个服务提供方,一个服务消费方,所以我准备了项目代码,项目模块说明如下图及下表。

image-20220705224759562

模块说明备注
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")
public class HelloController {
    @Value("${server.port}")
    private int serverPort;

    @PostMapping("/sayHello")
    public JSONObject sayHello(@RequestBody JSONObject param) {
        JSONObject data = new JSONObject();
        data.put("code", "000000");
        data.put("message", "hello from:" + serverPort);
        data.put("data", param);
        return data;
    }
}

配置文件,在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")
public class HelloController {
    @Resource
    private RestTemplateUtils restTemplateUtils;
    @Value("${service.provider.url}")
    private String providerServerUrl;
    @Value("${hello.name}")
    private String helloName;
    @RequestMapping(value = "/hello",method = {RequestMethod.GET,RequestMethod.POST})
    public JSONObject hello(@RequestParam String name) {
        JSONObject param = new JSONObject();
        param.put("name", name);
        param.put("name2",helloName);
        return param;
    }
    @RequestMapping(value = "/call",method = {RequestMethod.GET,RequestMethod.POST})
    public JSONObject call(@RequestParam String name) {
        JSONObject param = new JSONObject();
        param.put("name", name);
        return restTemplateUtils.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

image.png

java -jar cloud-service-provider.jar --spring.profiles.active=dev2

image.png

登录北极星控制台查看服务列表可以看到服务注册成功如下图

image-20220706134515432

消费者服务启动

java -jar cloud-service-consumer.jar

image-20220706134926313

北极星管理后台查看注册情况如下图

image-20220706135025575

3.3.2、服务验证

通过postman调用消费方接口,远程调用服务提供方,并验证是否具备负载均衡能力,验证结果如下图。

image-20220706135347038

image-20220706135409509

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。

image-20220706141533439

新增配置config/cloud-service-consumer.yml

image-20220706141838054

说明:使用过程同样通过@Value或者@ConfigurationProperties进行注入,然后通过@RefreshScope进行自动刷新。

3.3.4、配置验证

通过postman调用http://localhost:8081/consumer/hello接口进行验证,变更文件cloud-service-consumer.yml中的配置的hello.name的值,然后发布,无需重启服务,验证是否可以动态刷新。验证过程,略。

以上就是Spring Cloud Tencent 的服务发现,配置中心相关功能的尝鲜过程。高级功能限流,熔断,网关等更多功能,我们下期再做讲解。