跳到主要内容

快速入门

入门流程指引

平台使用流程如下图所示

流程说明:

  1. 部署微服务框架,参考管理员指南
  2. 管理员为目标项目&集群开启微服务治理开关,实现服务接入时自动注入注册中心相关环境信息。
  3. 业务服务自动注册成功,对其进行统一管理、治理及运维等。

微服务接入步骤

微服务支持容器部署、主机部署方式,本章节将介绍微服务如何接入TMF进行服务发现和服务治理。

前提条件

管理员已部署微服务框架,参考管理员指南-安装微服务框架

  1. 管理员为目标项目&集群开启微服务治理开关。然后此项目&集群中部署业务服务时,平台会通过java agent技术自动注入注册中心的环境信息,保证正确接入
test
  1. 用户在目标项目&集群中容器部署业务服务,部署成功后,进入[服务治理/微服务框架/服务管控]页面,选择目标项目&集群,即可查看。
  • 针对Dubbo应用,兼容nacos注册中心,无需修改配置文件和pom依赖。
  • 针对SpringCloud应用,兼容nacos注册中心,无需修改配置文件和pom依赖。需要注意@EnableDiscoveryClient,否则影响功能实现
查看
@EnableDiscoveryClient     //启动类需要增加该注解,进行服务发现
@SpringBootApplication
public class SimpleApplication {
public static void main( String[] args ) {
SpringApplication.run(SimpleApplication.class, args);
}
}
  1. 此时网关路由、网关限流能力可以直接使用。但如需微服务治理能力,要为目标服务添加相关依赖
  • 配置中心
查看
  1. 修改pom依赖,在pom.xml中添加如下依赖
<!-- 配置中心需要的依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- 健康检查需要的依赖,平台会通过端点检测是否正确使用SDK -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  1. bootstrap.yml文件中添加配置 managemennt
 spring:
cloud:
nacos:
config:
file-extension: ${NACOS_CONFIG_FILE_EXTENSION}
group: ${CONFIG_GROUP}
name: ${SERVICE_NAME}-${PROFILE}

management:
endpoints: #平台功能需要功通过端点检查是否配置相关SDK
web:
exposure:
include: ${ENDPOINTS_INCLUDE:*}
cors:
allowed-origins: "*"
allowed-methods: "*"
base-path: ${ENDPOINTS_BASE_PATH:/}
  • 服务治理能力,流控、熔断降级、访问控制等
查看
  1. 添加依赖
<!-- 服务治理:流控熔断降级访问控制需要的依赖 -->
<dependency>
<groupId>com.tenxcloud</groupId>
<artifactId>spring-cloud-starter-tenx-sentinel</artifactId>
<version>v5.6.0</version>
</dependency>
<!-- 健康检查需要的依赖,平台会通过端点检测是否正确使用SDK -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  1. 添加配置
 management:
endpoints: #平台功能需要通过端点检查是否配置相关SDK
web:
exposure:
include: ${ENDPOINTS_INCLUDE:*}
cors:
allowed-origins: "*"
allowed-methods: "*"
base-path: ${ENDPOINTS_BASE_PATH:/}
  1. 修改代码
@Configuration  //restTemplate需要使用RestTemplateBuilder进行创建
public class MyConfig {
RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
}
  • 服务跨集群发现和治理
查看
  1. 添加依赖
<!-- 跨集群调用需要的依赖 -->
<dependency>
<groupId>com.tenxcloud</groupId>
<artifactId>spring-cloud-starter-tenx-nacos-cluster</artifactId>
<version>v5.6.0</version>
</dependency>

<!-- 健康检查需要的依赖,平台会通过端点检测是否正确使用SDK -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  1. 添加配置
management:
endpoints: #平台功能需要通过端点检查是否配置相关SDK
web:
exposure:
include: ${ENDPOINTS_INCLUDE:*}
cors:
allowed-origins: "*"
allowed-methods: "*"
base-path: ${ENDPOINTS_BASE_PATH:/}
  1. 添加相关治理依赖后,服务需要重新构建部署。部署成功后,即可使用平台提供的治理能力。

完整示例说明

部署TMF后,产品提供了示例demo,方便用户体验微服务框架的治理能力。参考github https://github.com/tenxcloud/microservice-demos/tree/main/tmf

demo里面有不同类型的项目,包括dubbo项目以及SpringCloud项目,可以用来测试微服务平台的相关功能,可以参考demo编写代码。

  • dubbo-demo

dubbo-demo模块提供了一个dubbo应用接入微服务平台的样例,将dubbo-demo部署到微服务平台,就可以使用通过微服务平台对dubbo服务进行服务治理。

  • opentracing-demo

opentracing-demo模块包含kafka、rabbitmq、redis、rocketmq、mysql等中间件,主要用来测试服务与中间件之间的链路,即验证中间件链路追踪功能。

  • tmf-demo-simple

tmf-demo-simple模块提供了SpringCloud应用接入微服务平台的样例,只需要按照接入指南引入相关功能SDK,然后部署到微服务平台,就可以使用相关功能。比如熔断降级,跨集群调用,主备服务切换等功能。

查看pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.7.RELEASE</version>
</parent>

<modelVersion>4.0.0</modelVersion>

<groupId>com.tenxcloud.clouddemo</groupId>
<artifactId>opentracing-demo</artifactId>

<name>opentracing-demo</name>

<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<alibaba-cloud.version>2.2.5.RELEASE</alibaba-cloud.version>
<spring-cloud.version>Hoxton.SR9</spring-cloud.version>
<nacos.version>2.0.4</nacos.version>
</properties>

<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.1.3.RELEASE</version>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.1.3.RELEASE</version>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>${nacos.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<!-- 规范api展示 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.0</version>
</dependency>

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${alibaba-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>

查看部署yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: tmf-demo-simple //工作负载的名称,可自定义
spec:
selector:
matchLabels:
{key}: {value} //用来匹配pod的,需要与此yaml的
spec.template.metadata.labels保持一致
template:
metadata:
labels:
{key}: {value} //key-value键值对,随便定义,这是pod的label
spec:
containers:
- env:
- name: SERVICE_NAME
value: tmf-demo-simple //用于Nacos的微服务名称,必须与svc的name保持一致
- name: NACOS_GROUP
value: DEFAULT_GROUP //微服务所属Nacos分组,默认使用
DEFAULT_GROUP,可自定义
image: 192.168.90.214/system_containers/demo:v5.6.0 //需要修改成
实际镜像地址
imagePullPolicy: IfNotPresent
name: demo //随便定义,pod里的容器名称
ports:
- containerPort: 8401 //容器的端口,根据镜像修改
protocol: TCP
resources:
limits:
cpu: "2"
memory: 2Gi
requests:
cpu: 100m
memory: 512Mi

apiVersion: v1
kind: Service
metadata:
name: tmf-demo-simple //必须和nacos的微服务名称保持一致,即deploy
的SERVICE_NAME环境变量
spec:
ports:
- name: tcp-port-0
port: 8401 //服务端口,自定义,即容器映射到服务的端口
protocol: TCP
targetPort: 8401 //容器端口,根据工作负载
spec.template.spec.containers.ports.containerPort定义
selector:
{key}: {value} //用来匹配pod的,需要与对应负载的
spec.template.metadata.labels保持一致
type: ClusterIP