Spring Cloud Tencent 尝鲜《一》

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
简介: 第一章节我们先说说基本概念,然后说一下配置的使用及服务发现与注册整合过程。

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

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 的服务发现,配置中心相关功能的尝鲜过程。高级功能限流,熔断,网关等更多功能,我们下期再做讲解。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
目录
相关文章
|
4月前
|
监控 负载均衡 Java
深入理解Spring Cloud中的服务网关
深入理解Spring Cloud中的服务网关
|
4月前
|
Java 开发工具 git
实现基于Spring Cloud的配置中心
实现基于Spring Cloud的配置中心
|
4月前
|
设计模式 监控 Java
解析Spring Cloud中的断路器模式原理
解析Spring Cloud中的断路器模式原理
|
4月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
Spring Cloud Alibaba 发布了 Scheduling 任务调度模块 [#3732]提供了一套开源、轻量级、高可用的定时任务解决方案,帮助您快速开发微服务体系下的分布式定时任务。
14960 29
|
4月前
|
负载均衡 Java Spring
Spring cloud gateway 如何在路由时进行负载均衡
Spring cloud gateway 如何在路由时进行负载均衡
508 15
|
4月前
|
Java Spring
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
113 3
|
4月前
|
消息中间件 Java 开发者
Spring Cloud微服务框架:构建高可用、分布式系统的现代架构
Spring Cloud是一个开源的微服务框架,旨在帮助开发者快速构建在分布式系统环境中运行的服务。它提供了一系列工具,用于在分布式系统中配置、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等领域的支持。
191 5
|
4月前
|
Java API 开发工具
Spring Boot与Spring Cloud Config的集成
Spring Boot与Spring Cloud Config的集成
|
4月前
|
存储 安全 Java
实现基于Spring Cloud的分布式配置管理
实现基于Spring Cloud的分布式配置管理