Skip to content

网关与下游微服务的通信协议

在微服务架构中,Spring Cloud Gateway 与下游微服务之间的通信主要通过 HTTP/HTTPS 协议进行。以下是完整的交互流程和底层机制:


核心通信流程


关键技术细节

1. 协议与数据传递

  • 基础协议:HTTP/1.1 或 HTTP/2(Spring Cloud Gateway 2021+ 支持 HTTP/2)
  • 请求转发
    • Gateway 使用 Reactor Netty HTTP Client(默认)或 Jetty 客户端向下游服务发起新 HTTP 请求
    • 原客户端请求被转换为新请求(保留/修改 Headers/Body)
    java
    // 伪代码:网关向下游服务发起HTTP调用
    WebClient.create().post()
             .uri("http://user-service/api/data")
             .header("X-Auth", "valid-token")
             .bodyValue(requestBody)
             .retrieve()
             .bodyToMono(String.class);
  • 响应传递:下游服务的 HTTP 响应(状态码/Headers/Body)通过相同 HTTP 连接返回网关

2. 请求/响应修改机制

网关过滤器可实现双向数据修改

java
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    // 修改请求 (例:添加认证Header)
    ServerHttpRequest modifiedRequest = exchange.getRequest().mutate()
            .header("Authorization", "Bearer xxx")
            .build();

    // 修改响应 (例:添加自定义Header)
    ServerHttpResponse modifiedResponse = exchange.getResponse();
    modifiedResponse.getHeaders().add("X-Gateway-Proxy", "true");

    return chain.filter(exchange.mutate().request(modifiedRequest).build());
}

3. 特殊场景处理

场景实现方式
WebSocket 代理自动升级为 WebSocket 协议,保持 TCP 长连接
gRPC 透传通过 grpc 路由过滤器进行协议转换
大文件流式传输基于 Reactor 的背压机制,支持分块传输(Chunked Transfer)
响应缓存内置 CacheResponseBody 过滤器缓存响应体

4. 性能优化机制

  • 连接池管理:Netty 客户端使用弹性连接池(默认 maxConnections=500)
  • 响应式背压:基于 Project Reactor 的非阻塞 IO 模型
  • 数据流处理:支持 Flux<DataBuffer> 流式处理多 GB 文件
  • 超时控制:通过配置全局超时:
yaml
spring:
  cloud:
    gateway:
      httpclient:
        connect-timeout: 1000
        response-timeout: 5s

与普通 HTTP 调用的区别

虽然基于 HTTP,但网关转发有以下特殊行为

  1. 请求重写:自动修改 Host/Port/Path(根据路由配置)
  2. 协议升级:支持 HTTP→WebSocket 等协议转换
  3. 断路器集成:通过 CircuitBreaker 过滤器实现熔断
  4. 流量染色:添加 X-Sc-Gateway-Request 等标记头
  5. 元数据传递:通过 Headers 传递认证信息(如 X-User-Id

调试建议

使用工具观察实际流量:

bash
# 查看网关向下游发起的请求
curl -v http://gateway:8080/api --proxy http://localhost:8888

# 关键Header标识(网关添加):
X-Forwarded-For: 192.168.1.1
X-Forwarded-Host: api.yourdomain.com
X-Gateway-Source: SpringCloudGateway

结论

Spring Cloud Gateway 与下游服务之间:

  1. 主要协议:HTTP/HTTPS(占比 90%+ 场景)
  2. 🔧 底层实现:基于 Reactor Netty 的异步 HTTP 客户端
  3. 高级能力:支持协议升级、流式传输、断路器集成
  4. ⚠️ 性能注意:需合理配置连接池和超时参数

特殊协议(如 gRPC/RSocket)可通过扩展过滤器实现,但需要额外的编解码处理。