实测 Alibaba Sentinel 1.8.9 的限流与熔断:QPS 限流用最近 1 秒的滑动窗口;线程数限流、匀速排队与预热的行为;慢调用比例熔断;异常比例不调用 Tracer.trace 就不会记录;统计窗口内请求数不足最少请求数时不会熔断;Spring 接口被拦返回 429,用 blockHandler 则是 200。
实测 Spring Boot 4 + Micrometer Tracing 1.6.7:只加 bridge-otel 依赖没有任何效果,要用 spring-boot-starter-opentelemetry;日志里出现 traceId-spanId,服务间用 W3C traceparent 传播,默认采样 10%;只有注入的 RestClient.Builder 才会传播,RestClient.create() 与 new RestTemplate() 链路会断;换线程后 traceId 丢失,加 ContextPropagatingTaskDecorator 才能传播。
实测 Spring Cloud Stream(Kafka 绑定器):函数式绑定名 in-in-0 默认就是 topic 名;不配 group 是匿名组,每个实例收全量,配 group 才分摊分区;新的具名组从最早消息读,匿名组只读新消息;处理失败默认重试 3 次后丢弃,enableDlq 转存到 error.<topic>.<group>;多个函数 bean 不写 spring.cloud.function.definition 则一个都不绑定。
实测 Spring Cloud Alibaba 2025.1.0.0 + Nacos 3.1.1:实例默认是临时实例,SIGTERM 与 SIGKILL 都在 0.6 秒内摘除;引入 nacos-config 但不写 spring.config.import 应用直接启动失败;远程配置覆盖本地同名 key;Nacos 推送让 @RefreshScope 与 @ConfigurationProperties 约 0.1 秒内生效而普通单例不变;不同 group 的同名 dataId 互相隔离。
实测 Spring Cloud Gateway 的几种灰度方式:Header 谓词按请求头路由(顺序写反则永不命中);Weight 谓词接近 80/20 但同一用户会在两个版本之间跳;按用户 ID 尾号分桶让同一用户始终同版本;lb:// 需要 loadbalancer starter,weighted 配置下 1000 次请求恰好 800/200;request-based-sticky-session 在网关里没有看到 Set-Cookie。
在本机 kind 集群上实测 Spring Cloud Kubernetes 5.0.3:应用不在 Kubernetes 上时服务发现和 ConfigMap 都静默不生效,要 spring.main.cloud-platform=kubernetes;getInstances 来自 Endpoints,metadata 带 Service 的标签和注解;副本数变化 1 秒内可见;ConfigMap 要写 spring.config.import=kubernetes:;热加载 reload.enabled=true 还需要 actuator 依赖,否则不生效。
实测服务启动顺序:自动注册发生在 Web 服务器启动那一刻,早于 ApplicationRunner 与 readiness;3 秒预热期间 Nacos 里已有实例,调用方 121 次请求被 503;register-enabled=false 加手工注册、auto-registration.enabled=false、instance-enabled=false 加 setStatus 三条路在我的环境里都没走通;把预热放进 phase 0 的 SmartLifecycle 后调用方 0 次失败。
实测 Apache Dubbo 3.3.6 与 HTTP/1.1 的差别:小请求上 dubbo 协议的请求(334 字节)比 HTTP(191 字节)还大,载荷变大后比 JSON 小约 29%;8 线程吞吐 33826 对 19332 次/秒;50 个并发线程 dubbo 与 tri 只用 1 个 TCP 连接而 HTTP/1.1 用 50 个;dubbo 默认超时重试使服务端执行 3 次。
实测 Gateway → Feign → 下游的超时叠加:外层 Gateway 3 秒先超时,客户端拿 504 但下游照样跑完;内层 Feign 2 秒先超时,客户端拿到 500 而不是 504;Feign 重试 5 次让 A 在客户端收到 504 之后还发出第 5 次请求;Gateway Retry 与 Feign 叠加使下游被调用 3 次、客户端等 6.3 秒。
实测 Spring Cloud Gateway 的 TokenRelay:网关登录成功但路由不带令牌时下游资源服务器返回 401;加 TokenRelay 过滤器后同一个 access_token(jti 不变)被原样透传;下游默认不校验受众(aud=gw 的令牌也被接受);第二跳(A 调 B)要自己转发 Authorization 头;令牌快过期时 TokenRelay 自动刷新。
实测 Spring AMQP 监听容器:concurrency 决定消费者线程数,max-concurrency 在短突发里来不及扩容;默认 prefetch 250 在处理时间不均匀时让 5 条慢消息全落在一个消费者上(5.0 秒对 3.1 秒);默认 default-requeue-rejected=true 让 poison 消息 3 秒被投递 37670 次;kill -9 时 AUTO 与 MANUAL 不丢消息,NONE 丢 4 条。
实测 Spring AMQP 的重试与死信:监听重试是在消费者线程里原地进行(0.5、1.0、2.0 秒间隔),重试用完没有死信配置就丢弃;Spring Boot 4 里 max-attempts 被悄悄忽略,要改用 max-retries(总调用次数 = max-retries + 1);配死信后消息带 x-death 头进入死信队列;同步重试堵住队列 7 秒;TTL 等待队列方案不阻塞;消息转换失败不重试直接进死信。