Feign、Spring Cloud CircuitBreaker 与 Resilience4j 局部实验
公开入口,仓库根目录,JDK21/Maven3.9/Python3;不依赖 MySQL、Redis、注册中心或任何外部服务:
python3 labs/remote-client/run.py入口记录 JDK/Maven、执行两模块 clean test、核对十二份 Surefire 计数(合计 35)、解析依赖版本、校验 35 条 U33 观察行(33 类标记),写入 evidence/u33-2026-10-27.json。测试 JVM、loopback HttpServer/executor 与幂等测试的 JDK HttpClient 在用例内关闭;入口创建的进程组由 runner 回收。
教材:远程客户端与容错组合。通用 deadline、UNKNOWN 与放大模型仍见超时重试、熔断限流降级。
公开工程:根 POM、runner、Feign 应用、接口契约、隔离配置类、Feign 测试、受控上游、HTTP Service Client 测试、R4j 应用、CB 状态机测试、TimeLimiter 测试、幂等上游、运行证据。
| 模块 | 真实运行入口 | 实际观察 |
|---|---|---|
feign | com.sun.net.httpserver.HttpServer 随机端口 + Feign/Apache HC5 | 20 个测试:HC5 客户端装配;路径/头/JSON 绑定;400/429/500/502+Retry-After 的异常分级与 429/503 隐藏重试;POST503 默认2次效果/禁用HC5自动重试后1次并恢复;503 在 2000ms/250ms 读超时下 2/1 次隐藏尝试;默认 Retryer 与自定义 Retryer 的尝试数;读超时后写已提交(1 次效果)与自定义 Retryer 写重试(3 次效果);连接拒绝根因;连接池复用;RestClient + HttpServiceProxyFactory 替代调用;配置类泄漏修复后的隔离;Optional/ResponseEntity包装正常/204/坏JSON/恢复、自定义422/429错误、显式单连接池等待与恢复、禁HC5隐藏重试及读超时覆盖 |
resilience | 真实 R4j 状态机/装饰器 + JDK HttpClient + 第二个 loopback 上游 | 15 个测试:CB 窗口/阈值/半开转换与失败率;SCB fallback 的 ExecutionException 原始包装、解包与恢复;Retry×CB 两种顺序的失败计数;Bulkhead 并发拒绝;executeCompletionStage 超时后效果仍发生、decorateFutureSupplier 取消 Future 但已提交效果不回滚;稳定幂等键 2 次尝试/1 次效果、新键 3 次尝试/3 次效果,以及 COMMITTED/UNKNOWN 状态查询 |
35 个测试都通过真实 socket HTTP 或真实状态机对象观察行为:没有 mock Feign 代理,没有直接调用内部方法,也没有用 stub 冒充上游。Feign 全部使用固定 url,因此实验证明的是客户端行为,不是服务发现或负载均衡。
新增配置与恢复工程:FeignConfigurationTest、DeadlineCompositionHttpTest、ResiliencePolicyTest、DurableRecoveryHttpTest、DurableUpstream。
本机环境(一次运行的实际值)
BellSoft Liberica JDK 21.0.11(/usr/libexec/java_home -v21)、Maven 3.9.9、macOS 27.0.1 arm64;Boot 4.0.9、Cloud 2025.1.4、Spring Framework 7.0.10、Spring Cloud OpenFeign 5.0.4(Feign 13.6.1、feign-hc5 与 Apache HttpClient5 5.5.2)、Spring Cloud CircuitBreaker 5.0.3、Resilience4j 2.3.0。实际解析版本、退出码、观察行与文件 SHA-256 见入口生成的 evidence/u33-*.json。
边界
- 无真实注册中心、LoadBalancer 集群、生产网关或跨进程网络分区;
url固定实例,LB 接入点只有源码依据。 - 无 TLS/mTLS、OpenFeign 内建 CircuitBreaker 集成、Sentinel 组合或 Micrometer 实际指标导出。SCB默认ThreadPoolBulkhead已经过调用;容量/拒绝/排队未专项验证。
- HC5每路由1连接、获取连接100ms等待与释放后恢复已运行;keep-alive策略与生产池容量未运行。
- 第一层内存上游演示稳定键与UNKNOWN;第二层H2 2.4.240临时文件库验证PENDING持久化、效果与终态同事务回滚、已提交丢响应后的查询、正常关闭重开后的恢复及并发重复效果为1。不是OS进程崩溃、断电、跨实例或外部支付原子性验证。
- 共享700ms绝对deadline经Retry/CB/TimeLimiter/Bulkhead真实HTTP组合验证发送前拒绝,恢复使用新预算经过同一组合并检查许可归还;TIME_BASED以受控Clock推进过期,慢调用与20/40ms退避使用真实时间。
- 无容量与吞吐压测;
2 × 3 × 2 = 12与3 × 4 × 3 = 36是配置算术,不是压测结果。 - 只使用合成数据与 loopback 随机端口;不写用户数据,不触碰本机其他服务。
已知未运行
真实 Eureka/Consul/ZooKeeper/Kubernetes 与 Feign LoadBalancer 选实例、Sentinel/Resilience4j 生产组合、Gateway 与 Feign 双层熔断、TLS/mTLS、网络分区、生产连接池容量、线程池隔离舱专项、Micrometer/Prometheus 指标导出、容量压测,均未在本实验运行;对应结论按各票教材标注为源码/配置推演或待验证。