package com.nanri.aiimage.config; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; /** * 紫鸟客户端统一配置解析(task-170)。 * * 真实基线(已核实):连接超时来自共享 HttpClient(HttpClientPool connect=10s, * 不读 aiimage.ziniao.connect 字段);读取超时由 ZiniaoClientImpl 取 * aiimage.ziniao.read-timeout-seconds*1000(生产默认 15s)经 requestFactory 生效; * 当前无 call timeout / 无重试。 * * 语义:read 优先取模块级现有配置(保证接入切点时行为不变),未配置时回退命名空间 * aiimage.http-client.*;connect/call/retry 取命名空间(未来由命名空间统一治理)。 * 仅提供稳定访问面,不改动 ZiniaoClientImpl 调用点。 */ @Component @RequiredArgsConstructor public class ZiniaoHttpConfigResolver { private final HttpClientProperties httpClientProperties; private final ZiniaoProperties ziniaoProperties; /** 连接超时:共享 HttpClient 决定,命名空间默认 10s 与 HttpClientPool 现状一致。 */ public long connectTimeoutMillis() { return httpClientProperties.effectiveConnectTimeoutMillis(); } /** 读取超时:模块级秒数优先(现状 15s);未配置时回退命名空间。 */ public long readTimeoutMillis() { int moduleSeconds = ziniaoProperties.getReadTimeoutSeconds(); if (moduleSeconds > 0) { return moduleSeconds * 1_000L; } return httpClientProperties.effectiveReadTimeoutMillis(); } public long callTimeoutMillis() { return httpClientProperties.effectiveCallTimeoutMillis(); } public int maxRetries() { return httpClientProperties.effectiveMaxRetries(); } public long baseRetryDelayMillis() { return httpClientProperties.getBaseRetryDelayMillis(); } }