Spring Cloud Tencent 尝鲜《一》

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

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

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

目录
相关文章
|
3天前
|
监控 安全 Java
Spring cloud原理详解
Spring cloud原理详解
14 0
|
7天前
|
消息中间件 负载均衡 Java
【Spring Cloud 初探幽】
【Spring Cloud 初探幽】
14 1
|
9天前
|
Java 开发者 微服务
Spring Cloud原理详解
【5月更文挑战第4天】Spring Cloud是Spring生态系统中的微服务框架,包含配置管理、服务发现、断路器、API网关等工具,简化分布式系统开发。核心组件如Eureka(服务发现)、Config Server(配置中心)、Ribbon(负载均衡)、Hystrix(断路器)、Zuul(API网关)等。本文讨论了Spring Cloud的基本概念、核心组件、常见问题及解决策略,并提供代码示例,帮助开发者更好地理解和实践微服务架构。此外,还涵盖了服务通信方式、安全性、性能优化、自动化部署、服务网格和无服务器架构的融合等话题,揭示了微服务架构的未来趋势。
32 6
|
13天前
|
JSON Java Apache
Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient
Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient
|
13天前
|
负载均衡 Java 开发者
Spring Cloud:一文读懂其原理与架构
Spring Cloud 是一套微服务解决方案,它整合了Netflix公司的多个开源框架,简化了分布式系统开发。Spring Cloud 提供了服务注册与发现、配置中心、消息总线、负载均衡、熔断机制等工具,让开发者可以快速地构建一些常见的微服务架构。
|
15天前
|
消息中间件 Java RocketMQ
Spring Cloud RocketMQ:构建可靠消息驱动的微服务架构
【4月更文挑战第28天】消息队列在微服务架构中扮演着至关重要的角色,能够实现服务之间的解耦、异步通信以及数据分发。Spring Cloud RocketMQ作为Apache RocketMQ的Spring Cloud集成,为微服务架构提供了可靠的消息传输机制。
28 1
|
15天前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo: 微服务通信的高效解决方案
【4月更文挑战第28天】在微服务架构的发展中,服务间的高效通信至关重要。Spring Cloud Dubbo 提供了一种基于 RPC 的通信方式,使得服务间的调用就像本地方法调用一样简单。本篇博客将探讨 Spring Cloud Dubbo 的核心概念,并通过具体实例展示其在项目中的实战应用。
15 2
|
15天前
|
监控 Java Sentinel
Spring Cloud Sentinel:概念与实战应用
【4月更文挑战第28天】在分布式微服务架构中,确保系统的稳定性和可靠性至关重要。Spring Cloud Sentinel 为微服务提供流量控制、熔断降级和系统负载保护,有效预防服务雪崩。本篇博客深入探讨 Spring Cloud Sentinel 的核心概念,并通过实际案例展示其在项目中的应用。
24 0
|
15天前
|
Cloud Native Java Nacos
Spring Cloud Nacos:概念与实战应用
【4月更文挑战第28天】Spring Cloud Nacos 是一个基于 Spring Cloud 构建的服务发现和配置管理工具,适用于微服务架构。Nacos 提供了动态服务发现、服务配置、服务元数据及流量管理等功能,帮助开发者构建云原生应用。
21 0