教程系列(一):Spring Cloud Tencent 接入注册中心

简介: 注册中心是微服务最核心的组件,本文主要介绍使用 Spring Cloud Tencent 接入北极星注册中心。北极星注册中心具备服务上下线等能力,是一款非常好用的注册中心产品。

Github 地址:https://github.com/Tencent/spring-cloud-tencent

模块简介

服务注册发现模块是 Spring Cloud Tencent 最核心的模块之一,实现了标准的 Spring Cloud Discovery SPI 接口 (PolarisDiscoveryClient.java)。任何一个 Spring Cloud 标准应用都能快速平滑的使用 Spring Cloud Tencent Discovery。

Spring Cloud Tencent Discovery 背后对接的是社区流行的统一服务发现和治理平台 Polaris

快速入门

本章节将介绍如何在 Spring Cloud 项目中使用 Spring Cloud Tencent Discovery 的功能。

完整 Example 代码请参考:polaris-discovery-example

第一步:引入 Polaris 服务端

方式一:搭建本地北极星服务

搭建北极星服务请参考 Polaris Getting Started

方式二:使用北极星开源提供的体验环境

  • Username: polaris
  • Password: polaris
  • Server Address: grpc://183.47.111.80:8091

方式三:使用腾讯云北极星服务

腾讯云提供了免运维的北极星云服务,基于云服务可以快速开通生产级高可用北极星集群 了解更多

第二步:引入 Spring Cloud Tencent Discovery 依赖

  1. 参考 Spring Cloud Tencent 版本管理 文档获取最新的版本号,引入 Spring Cloud Tencent Bom,例如:
<dependencyManagement><dependencies><dependency><groupId>com.tencent.cloud</groupId><artifactId>spring-cloud-tencent-dependencies</artifactId><version>1.5.0-Hoxton.SR9</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>2. 引入 Spring Cloud Tencent Discovery Starter
<dependency><groupId>com.tencent.cloud</groupId><artifactId>spring-cloud-starter-tencent-polaris-discovery</artifactId></dependency>


第三步:增加 Spring Cloud Tencent Discovery Starter 的配置文件

  1. 在您的 bootstrap.yml 配置文件中加入以下配置内容
spring:
  application:
    name: ${application.name}
  cloud:
    polaris:
      address: grpc://${修改为第一步部署的 Polaris 服务地址}:8091
      namespace: default


第四步:启动应用

应用成功启动后,到 Polaris 控制台查看服务注册信息。如下图所示:


到此接入 Spring Cloud Tencent Discovery 即已完成。

拓展使用

元数据

元数据定义

服务实例通常带有一系列的标签信息,例如实例所属的机房信息、地域信息、环境信息等,这些信息统称为服务实例的元信息。实例注册到注册中心时,会带上自身的元数据信息。当消费方从注册中心获取到实例时,既可以同时获取到每个实例的元信息。


元数据来源

来源一:项目里的配置文件

在 Spring Cloud 项目里的 application.yml 中配置以下内容:

spring:
  cloud:
    tencent:
      metadata:
        content:
          idc: shanghai
          env: dev1


应用在启动注册时,会自动读取配置文件并带上 idc=shanghaienv=dev1 两个元数据信息。

通过配置文件的方式为最直接的方式,但是这种方式有一个最大的弊端,就是设置不同元数据值时需要重新编译打包。本质上的原因就是:大部分的元数据信息属于部署环境的信息或者叫机器的信息,而不是应用静态代码的信息。

来源二:应用启动参数

众所周知,Spring Boot 应用配置文件定义的配置项都可以通过 -D 启动参数覆盖,例如通过以下方式覆盖 env 值为 dev2 :

Java -jar -Dspring.cloud.tencent.metadata.content.env=dev2  demo.jar

通过启动参数的方式,可以在启动时动态修改元数据信息,而不用重新打包,从而解决了方式一的弊端。

但是这种方式也有弊端,就是谁负责修改启动脚本,加上 -D 参数呢?

大部分情况下,Java -jar 启动命令都放在项目里的 start.sh 脚本里,那也就是说,每次需要增加 -D 参数都要修改 start.sh,这本身也会增加维护成本。

来源三:环境变量

环境变量的方式则完全跟运行的应用解耦,是完完全全的机器信息。Spring Cloud Tencent 约定了前缀 SCT_METADATA_CONTENT_ 的环境变量为应用的元数据信息。例如:

SCT_METADATA_CONTENT_IDC=shanghai

SCT_METADATA_CONTENT_ENV=dev1

应用在启动时,则会自动携带 IDC=shanghaiENV=dev 的元数据。

通过环境变量的方式,paas 平台在拉起一台虚拟机或者一个容器 Pod 时,只需要设置相应的环境变量即可。而应用自身无需做任何其它事情。

以上几种方式,可以通过查看启动日志确认是否正确打标:

grep "Loaded static metadata info" xx.log

来源四:自定义实现 SPI (待实现)

前面三种方式为 SCT(Spring Cloud Tencent 的缩写) 内置的方式,但是并不一定符合每个公司自己的规范或者实现。例如:

  • 把元数据放到机器上的某一个配置文件里,例如 /etc/metadata
  • 启动时,调用 CMDB 的接口获取元信息

所以 SCT 定义了一个 SPI,方便用户自己实现元数据来源。SCT 在注册前,回调 SPI 获取元数据信息,并注册到注册中心。

控制台调整实例的权重、下线实现等操作

如下图所示,可以在控制台上对实例进行一系列管控操作,例如隔离实例,调整实例权重等。


自定义参数

除了控制台页面可以调整参数以外,Spring Cloud Tencent Discovery 提供了很多自定义参数满足各类场景。以权重随机策略为例,您可以在项目里的 bootstrap.yml 配置文件里配置 spring.cloud.polaris.weight 既可以调整权重值(默认为 100)。

完整的的配置列表如下

配置项Key

默认值

是否必填

配置项说明

spring.cloud.polaris.address

Polaris 后端地址

spring.cloud.polaris.namespace

default

服务所在的命名空间名称

spring.cloud.polaris.service

${spring.application.name}

服务名称

spring.cloud.polaris.local-ip-address

注册的 IP 地址,默认情况下 Spring Boot 会自动获取 IP 地址无需指定 IP 地址,当需要自定义 IP 地址时才需要设置

spring.cloud.polaris.discovery.enabled

true

是否开启服务发现

spring.cloud.polaris.discovery.register

true

是否开启服务注册

spring.cloud.polaris.discovery.instance-enabled

true

当前微服务实例是否可以被访问

spring.cloud.polaris.discovery.token

鉴权 Token

spring.cloud.polaris.discovery.version

null

微服务版本

spring.cloud.polaris.discovery.protocol

null

微服务协议类型

spring.cloud.polaris.discovery.weight

100

微服务权重

spring.cloud.polaris.discovery.service-list-refresh-interval

60000

服务列表刷新间隔(毫秒)

目录
相关文章
|
19天前
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
31 6
|
19天前
|
Java 关系型数据库 MySQL
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
38 5
|
19天前
|
缓存 监控 Java
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
31 5
|
2月前
|
JSON Java Maven
实现Java Spring Boot FCM推送教程
本指南介绍了如何在Spring Boot项目中集成Firebase云消息服务(FCM),包括创建项目、添加依赖、配置服务账户密钥、编写推送服务类以及发送消息等步骤,帮助开发者快速实现推送通知功能。
114 2
|
3月前
|
XML JavaScript Java
Spring Retry 教程
Spring Retry 是 Spring 提供的用于处理方法重试的库,通过 AOP 提供声明式重试机制,不侵入业务逻辑代码。主要步骤包括:添加依赖、启用重试机制、设置重试策略(如异常类型、重试次数、延迟策略等),并可定义重试失败后的回调方法。适用于因瞬时故障导致的操作失败场景。
Spring Retry 教程
|
3月前
|
负载均衡 Java Nacos
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
微服务介绍、SpringCloud、服务拆分和远程调用、Eureka注册中心、Ribbon负载均衡、Nacos注册中心
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
|
3月前
|
XML 缓存 Java
spring源码剖析-spring-beans(内部核心组件,BeanDefinition的注册,BeanWapper创建)
spring源码剖析-spring-beans(内部核心组件,BeanDefinition的注册,BeanWapper创建)
52 10
|
2月前
|
JSON Java Maven
实现Java Spring Boot FCM推送教程
详细介绍实现Java Spring Boot FCM推送教程
114 0
|
4月前
|
SQL Java 数据库连接
Spring Boot联手MyBatis,打造开发利器:从入门到精通,实战教程带你飞越编程高峰!
【8月更文挑战第29天】Spring Boot与MyBatis分别是Java快速开发和持久层框架的优秀代表。本文通过整合Spring Boot与MyBatis,展示了如何在项目中添加相关依赖、配置数据源及MyBatis,并通过实战示例介绍了实体类、Mapper接口及Controller的创建过程。通过本文,你将学会如何利用这两款工具提高开发效率,实现数据的增删查改等复杂操作,为实际项目开发提供有力支持。
277 0
|
2月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
223 2
下一篇
DataWorks