feat(openapi): FormCenterSchemaClient 走标准 appCode 网关 fallback,application.yml 出厂 base-host 默认内部网关
build / build-push (push) Successful in 1m18s
build / build-push (push) Successful in 1m18s
This commit is contained in:
@@ -25,7 +25,7 @@ import java.util.Map;
|
|||||||
@Service
|
@Service
|
||||||
public class FormCenterSchemaClient {
|
public class FormCenterSchemaClient {
|
||||||
|
|
||||||
/** 服务目录 key(yh.open.services.form-center / targets 覆盖 / 枚举兜底三级解析) */
|
/** 服务目录 key(targets / services 覆盖优先,否则标准 appCode 网关 fallback) */
|
||||||
static final String TARGET = "form-center";
|
static final String TARGET = "form-center";
|
||||||
static final String SCHEMA_PATH = "/oapi/form/schema";
|
static final String SCHEMA_PATH = "/oapi/form/schema";
|
||||||
/** 快照是发布期一次性动作,超时给足(对照 RouteJudgeClient 的 3s 运行期预算) */
|
/** 快照是发布期一次性动作,超时给足(对照 RouteJudgeClient 的 3s 运行期预算) */
|
||||||
|
|||||||
@@ -74,7 +74,8 @@ yh:
|
|||||||
# 绝不能写进本文件:yh.open.services.{key} 是目录第 2 级,平台注入的 base-host 只喂第 3 级兜底、
|
# 绝不能写进本文件:yh.open.services.{key} 是目录第 2 级,平台注入的 base-host 只喂第 3 级兜底、
|
||||||
# 压不过它 —— 写进 jar 会让部署实例去连容器内的 localhost:8060(2026-09-18 事故:
|
# 压不过它 —— 写进 jar 会让部署实例去连容器内的 localhost:8060(2026-09-18 事故:
|
||||||
# Connection refused → 所有 /api/* 报 code=6 内部服务错误)。
|
# Connection refused → 所有 /api/* 报 code=6 内部服务错误)。
|
||||||
base-host: http://localhost:8060
|
# 统一内部网关门地址;本地 UserBase 直连使用显式 services.userbase 覆盖。
|
||||||
|
base-host: ${YH_OPEN_BASE_HOST:http://open-gateway-service:10013}
|
||||||
base-path: ""
|
base-path: ""
|
||||||
# 服务目录(子应用配置优化方案 §4.2):只在需要覆盖 PlatformService 枚举默认 ctx 时按 key 配置;
|
# 服务目录(子应用配置优化方案 §4.2):只在需要覆盖 PlatformService 枚举默认 ctx 时按 key 配置;
|
||||||
# prod 形态(网关域名 + 默认 ctx)下四域零配置。本地联调所需的 userbase 覆盖见上方环境变量。
|
# prod 形态(网关域名 + 默认 ctx)下四域零配置。本地联调所需的 userbase 覆盖见上方环境变量。
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
package com.yunhai.flowcenter.service;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.sun.net.httpserver.HttpServer;
|
||||||
|
import com.yunhai.platform.openapi.core.*;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
class AppCodeFormCenterRoutingTest {
|
||||||
|
@Test
|
||||||
|
void realSdkNeedsOnlyGatewayForCatalogAndExactSchema() throws Exception {
|
||||||
|
List<String> paths = new ArrayList<>();
|
||||||
|
HttpServer gateway = HttpServer.create(new InetSocketAddress("127.0.0.1", 0), 0);
|
||||||
|
gateway.createContext("/", exchange -> {
|
||||||
|
String path = exchange.getRequestURI().getPath(); paths.add(path);
|
||||||
|
String data = path.endsWith("/schema")
|
||||||
|
? "{\"formUuid\":\"test-form\",\"version\":3,\"groups\":[],\"audience\":[]}"
|
||||||
|
: "{\"items\":[],\"total\":0}";
|
||||||
|
byte[] bytes = ("{\"code\":0,\"data\":" + data + "}").getBytes(StandardCharsets.UTF_8);
|
||||||
|
exchange.sendResponseHeaders(200, bytes.length);
|
||||||
|
exchange.getResponseBody().write(bytes); exchange.close();
|
||||||
|
});
|
||||||
|
gateway.start();
|
||||||
|
try {
|
||||||
|
OpenApiProperties open = new OpenApiProperties();
|
||||||
|
open.setBaseHost("http://127.0.0.1:" + gateway.getAddress().getPort());
|
||||||
|
YschOpenCall call = new YschOpenCall(new YschCallProperties(), open, new ObjectMapper(), null);
|
||||||
|
assertFalse(call.hasTarget("form-center"));
|
||||||
|
assertEquals(0, new FormCenterCatalogClient(call).listForms(1L, null, null, 1, 20).getTotal());
|
||||||
|
assertEquals(3, new FormCenterSchemaClient(call, new ObjectMapper())
|
||||||
|
.fetchSchema(1L, "test-form", 3).get("formVersion"));
|
||||||
|
assertEquals(java.util.Arrays.asList("/form-center/oapi/form/forms", "/form-center/oapi/form/schema"), paths);
|
||||||
|
} finally {
|
||||||
|
gateway.stop(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user