本地开发联调
最近更新时间: 2024-10-17 17:10:00
本文介绍了两种本地开发联调的使用场景:
本地服务之间调用
本地服务调用云端服务
本地服务之间调用
操作场景
开发者通过搭建本地轻量级注册中心,将本地服务注册到轻量级注册中心上,服务之间通过服务名来进行调用。
操作步骤
1. 启动轻量级注册中心
本地开发调试时,需要使用轻量级注册中心,轻量级注册中心包含了 TSF 服务注册发现服务端的轻量版 。
2. 启动应用
本地启动应用可以通过 IDE 和 FatJar 两种方式。
IDE 中启动
在 IDE 中启动,通过 VM options 配置启动参数-Dtsf_consul_ip=127.0.0.1 -Dtsf_consul_port=8500 -Dtsf_application_id=a -Dtsf_group_id=b -Dtsf.swagger.enabled=false
,通过 main 方法直接启动。其中 IP 和 port 取值为轻量级服务注册中心的地址,使用了分布式配置功能的模块,需要设置-Dtsf_application_id=a -Dtsf_group_id=b
, 取值可为任意值。
FatJar 启动
(1)添加 FatJar 打包方式
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
(2)打包 FatJar 文件
添加完插件后,在工程的主目录下,使用 Maven 命令mvn clean package
进行打包,即可在 target 目录下找到打包好的 FatJar 文件。
(3)通过 Java 命令启动
java -Dtsf_instance_id=1111 -Dtsf_consul_ip=127.0.0.1 -Dtsf_consul_port=8500 -Dtsf.swagger.enabled=false -jar provider-demo-0.0.1-SNAPSHOT.jar
其中127.0.0.1
和8500为轻量级服务注册中心地址,在本地调试时 tsf_application_id 和 tsf_group_id 可以填任意值。
注意:
- Instance_id 是服务实例唯一标识,需要保证唯一性。。
- 由于轻量级服务注册中心(原生的 consul)的 metadata 只能支持512个字节,因此需要关闭 TSF 的 API 上报能力
-Dtsf.swagger.enabled=false
,如果没有这个启动参数,在本地运行 Demo 时将会报错,错误信息中包含Value is too long (limit 512 characters)
。
3. 验证
启动服务,分别进行调用,观察调用结果。
http://{consumer-demo-ip}:{consumer-demo-port}/echo-rest/test?user=test-tsf
http://{consumer-demo-ip}:{consumer-demo-port}/echo-async-rest/test?user=test-tsf
http://{consumer-demo-ip}:{consumer-demo-port}/test?user=test-tsf
本地服务调用云端服务
操作场景
如果开发者需要使本地正在开发的微服务和远端的微服务做联调,不需在本地启动服务注册中心,可直接使用本文提供的轻量级联调操作方法。其中,远端的微服务指通过 TSF 部署的 Spring Cloud 应用。 假设本地开发环境的 consumer-demo 服务,希望调用 TSF 上的 provider-demo 服务提供的接口,provider-demo 服务有一个实例提供外网 IP,服务监听端口为 18081。
前提条件
依赖 1.11.0-RELEASE 及以上版本的 SDK。
确保本地开发机和 provider-demo 的实例的网络连通性,确保从外网可访问 provider-demo 的端口号。
本地未启动 consul 或者 consumer-demo 未连接本地 consul ,否则 consumer-demo 会通过本地 consul 进行服务注册与发现。
操作步骤
在本地开发机器上,创建
${System.getProperty("user.home")}/.tsf/discovery/
目录,其中${System.getProperty("user.home")} 是本地开发机器的 home 目录。在该目录下创建服务缓存文件,缓存文件名称为
${service-name}.cache
,其中${service-name}
是被调服务名,在本例中是 provider-demo.cache。 在 provider-demo.cache 中填写远端服务的描述信息:
{
"statusCode": 200, # statusCode 字段必填,取值为200,表示正常状态码;请勿更改;
"content": [{
"service": {
"id": "provider-demo-18081", # 随机字符,确保唯一性
"service": "provider-demo", # 被调服务的服务名
"tags": [],
"address": "<被调服务的实例IP>", # 被调服务实例的 IP
"port": 18081, # 被调服务监听端口
"meta": {
}
},
"checks": []
}]
}
实际使用过程中,开发者仅需关注 content.service 结构体中的内容(id、service、address、port),其他字段内容可以复用上述示例。
- 启动 consumer-demo,启动命令中包含必要的 启动参数:
java -Dtsf_instance_id=1111 -Dspring.cloud.consul.config.fail-fast=false -Dspring.cloud.consul.discovery.register=false -Dspring.cloud.consul.discovery.fail-fast=false -Dspring.cloud.consul.discovery.catalogServicesWatch.enabled=false -Dspring.cloud.consul.config.watch.enabled=false -jar consumer-demo-0.0.1-SNAPSHOT.jar
注意:
Instanceid是服务实例唯一标识,需要保证唯一性。
- consumer-demo 会轮询调用 provider-demo 的接口,如果控制台的日志显示正常,说明调用成功。
启动参数说明
参数 | 含义 | 默认值 |
---|---|---|
spring.cloud.consul.discovery.register | 是否开启 consul 服务注册能力。 | true |
spring.cloud.consul.discovery.fail-fast | 是否开启服务注册发现快速失败能力。关闭后,如果发起服务注册失败,会继续进行服务启动。 | true |
spring.cloud.consul.discovery.catalogServicesWatch.enabled | 是否开启服务注册中心的异常请求。关闭后,会减少到服务注册中心的异常请求。 | true |
spring.cloud.consul.config.watch.enabled | 分布式配置长轮询监听定时任务。关闭后,会减少连接服务注册中心的异常日志输出。 | true |
spring.cloud.consul.config.fail-fast | 是否开启分布式配置快速失败功能。关闭后,如果请求 consul 失败,则输出异常日志,继续进行服务启动。 | true |