本地开发联调

最近更新时间: 2024-09-05 15:09: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 进行服务注册与发现。

操作步骤

  1. 在本地开发机器上,创建${System.getProperty(&quot;user.home&quot;)}/.tsf/discovery/目录,其中${System.getProperty("user.home")} 是本地开发机器的 home 目录。

  2. 在该目录下创建服务缓存文件,缓存文件名称为${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),其他字段内容可以复用上述示例。

  1. 启动 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是服务实例唯一标识,需要保证唯一性。

  1. 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