有奖捉虫:行业应用 & 管理与支持文档专题 HOT
本文介绍了三种本地开发联调的使用场景:
本地普通服务之间调用
本地微服务网关和普通服务之间的调用
本地服务调用云端服务

本地普通服务之间调用

操作场景

开发者通过搭建本地轻量级注册中心,将本地服务注册到轻量级注册中心上,服务之间通过服务名来进行调用。

操作步骤

步骤1:启动轻量级注册中心

本地开发调试时,需要使用轻量级注册中心,轻量级注册中心包含了 TSF 服务注册发现服务端的轻量版,详请参见 轻量级服务注册中心

步骤2:启动应用

本地启动应用可以通过 IDE 和 FatJar 两种方式。您可以单击以下页签,查看两种方式的操作步骤:
IDE 中启动
FatJar 启动
在 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, 取值可为任意值。
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

本地微服务网关和普通服务之间的调用

操作场景

开发者通过搭建本地轻量级注册中心,将本地服务注册到轻量级注册中心上,服务之间通过服务名来进行调用。

操作步骤

步骤1:启动轻量级注册中心

本地开发调试时,需要使用轻量级注册中心,轻量级注册中心包含了 TSF 服务注册发现服务端的轻量版,详请参见 轻量级服务注册中心

步骤2:本地启动微服务网关应用

本地启动应用可以通过 IDE 和 FatJar 两种方式。您可以单击以下页签,查看两种方式的操作步骤:
IDE 中启动
FatJar 启动
在 IDE 中启动,通过 VM options 配置启动参数-Dtsf_consul_ip=127.0.0.1 -Dtsf_consul_port=8500 -Dtsf_application_id=a -Dtsf_group_id=b -Dtsf_token=c -Dtsf_app_id=d -Dtsf.swagger.enabled=false,通过 main 方法直接启动。 其中 IP 和 port 取值为轻量级服务注册中心的地址,使用了分布式配置功能的模块,需要设置-Dtsf_application_id=a -Dtsf_group_id=b -Dtsf_token=c -Dtsf_app_id=d, 取值可为任意值。
注意
TSF 1.29.5-Finchley-RELEASE、1.29.1-Greenwich-RELEASE、1.29.3-Hoxton-Higher-RELEASE 之前的版本必须需要设置以上参数才能在本地环境正常启动,否则会报错。
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 -jar -Dtsf_consul_ip=127.0.0.1 -Dtsf_consul_port=8500 -Dtsf_application_id=a -Dtsf_group_id=b -Dtsf_token=c -Dtsf_app_id=d -Dtsf.swagger.enabled=false msgw-scg-0.0.1-SNAPSHOT.jar
其中127.0.0.1和8500为轻量级服务注册中心地址,在本地调试时 tsf_application_id、tsf_group_id、tsf_token 和 tsf_app_id 可以填任意值。
注意
Instance_id 是服务实例唯一标识,需要保证唯一性。
由于轻量级服务注册中心(原生的 consul)的 metadata 只能支持512个字节,因此需要关闭 TSF 的 API 上报能力 -Dtsf.swagger.enabled=false,如果没有这个启动参数,在本地运行 Demo 时将会报错,错误信息中包含 Value is too long (limit 512 characters)


步骤3:配置分组和分组 API

localtest.zip 包中的 group.json 和 api.json 复制到 /$user.home/tsf/gateway/ 下(其中 $user.home 指的是用户目录,如:/root/tsf/gateway/ )。其中 group.json 是部署组下的分组信息,api.json 是部署组下的分组 API 信息,默认要调用的下游微服务名是 provider-demo。

步骤4:验证

http://{msgw-scg-ip}:{msgw-scg-port}/test_group1/test_namespace/provider-demo/echo/1234
请求路径是:http://网关ip:网关port/网关分组context/命名空间名称/微服务名/API路径
如果本地网关调用的微服务名不是 provider-demo,则想要修改分组 API 配置中的微服务名,即需要修改 api.json 里的 serviceName 属性的值(修改下图中红框标出的内容):



group.json 内容解释: 其中 gatewayName 是部署组名称,gatewayGroupId 是部署组ID,groupId 是网关分组ID,groupName 是网关分组名称,groupContext 是网关分组 context。
{
"gatewayName":"test-group", //部署组名称
"gatewayGroupId":"group-yrlkqnly", //部署组ID
"reversion":24,
"updatedTime":"2021-03-29 11:56:52",
"result":[
{
"groupId":"grp-60khzyb4", //网关分组ID
"groupName":"group1", //网关分组名称
"groupContext":"/test_group1", //网关分组 context
"authMode":"none",
"groupType":"ms"
},
{
"groupId":"grp-sh1b4f4w",
"groupName":"group2",
"groupContext":"/test_group2",
"authMode":"none",
"groupType":"ms"
}
]
}
api.json 内容解释: 其中 gatewayName 是部署组名称,gatewayGroupId 是部署组ID,groupId 是网关分组ID(与 group.json 中的 groupId 保持一致时会认为该 API 属于该网关分组),apiId 是网关分组 API 的 ID,serviceName 是网关下游的微服务名(也就是下游微服务的名称),path 是网关分组 API 的路径(也就是下游微服务的 API)
{
"gatewayName":"test-group", //部署组名称
"gatewayGroupId":"group-yrlkqnly", //部署组ID
"reversion":80,
"updatedTime":"2021-03-29 11:56:52",
"result":[
{
"apiId":"api-c5zjvdbq", //网关分组 API 的 ID
"groupId":"grp-60khzyb4", //网关分组ID(与 group.json 中的 groupId 保持一致时会认为该 API 属于该网关分组)
"path":"/echo/{param}", //网关分组 API 的路径(也就是下游微服务的 API)
"method":"GET",
"serviceName":"provider-demo", //网关下游的微服务名(也就是下游微服务的名称)
"namespaceId":"namespace-v6m6pp5a",
"namespaceName":"test_namespace",
"usableStatus":"enabled",
"pathMapping":"/echo/{param}",
"apiType":"ms"
},
{
"apiId":"api-lc5cxghw",
"groupId":"grp-60khzyb4",
"path":"/echo/slow/{param}",
"method":"GET",
"serviceName":"provider-demo",
"namespaceId":"namespace-v6m6pp5a",
"namespaceName":"test_namespace",
"usableStatus":"enabled",
"pathMapping":"/echo/slow/{param}",
"apiType":"ms"
}
]
}