java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring Cloud Gateway 转发 SSE

浅谈Spring Cloud Gateway 转发 SSE 的那些坑

作者:go 码头整点薯条

本文主要介绍了SSE在Gateway场景下的常见问题题并提供了解决方案,包括禁止响应缓存、正确配置超时设置、透传Header等确保Gateway不加工SSE流式响应,帮助开发者避免常见错误

—— 为什么你本地能流,一上网关就“卡死”

一、背景:SSE 本地好好的,上了 Gateway 全废了

在做 AI 问答流式输出时,我最初的架构是这样的:

Browser
  ↓
Spring Cloud Gateway
  ↓
AI Service(SSE)

现象非常诡异:

当时的第一反应是:

“是不是 SSE 不能过网关?”

结论是:

SSE 可以过 Gateway,但默认配置下,几乎一定会翻车

二、SSE 在 Gateway 场景下到底“特殊”在哪?

1️⃣ SSE 的几个关键特性

而 Gateway 的本质是:

一个“智能代理” + 各种 Filter

这就产生了天然冲突。

三、第一个坑:响应被 Gateway “缓存”了

❌ 错误表现

❌ 根本原因

Gateway 默认会尝试:

✅ 正确做法:禁止响应缓存

spring:
  cloud:
    gateway:
      httpclient:
        response-timeout: 0s

并且不要使用这些 Filter:

👉 这些 Filter 天生会吃掉流

四、第二个坑:超时设置会“悄悄杀死连接”

❌ 常见错误配置

spring:
  cloud:
    gateway:
      httpclient:
        connect-timeout: 5000
        response-timeout: 30s

对普通接口没问题
对 SSE 来说是 致命的

原因

“30 秒还没结束?那我关了”

✅ SSE 专用超时配置

spring:
  cloud:
    gateway:
      httpclient:
        connect-timeout: 5000
        response-timeout: 0s   # 关键

五、第三个坑:Header 被 Gateway “改坏了”

❌ 错误现象

常见罪魁祸首

❌ Content-Type 被改写

Content-Type: application/json 

而不是:

text/event-stream 

✅ Gateway 必须“原样透传”

spring:
  cloud:
    gateway:
      default-filters:
        - PreserveHostHeader

并且不要在 Filter 里手动 set header。

六、第四个坑:HTTP/1.1 被无意中升级成 HTTP/2

问题表现

原因

✅ 强制 Gateway 使用 HTTP/1.1

spring:
  cloud:
    gateway:
      httpclient:
        protocol: HTTP11

七、一个「能跑通 SSE 的 Gateway 路由示例」

spring:
  cloud:
    gateway:
      routes:
        - id: ai-sse
          uri: lb://mb-ai
          predicates:
            - Path=/ai/health_manager/stream
          filters:
            - StripPrefix=1

关键点总结:

八、前端为什么“必须立即有输出”?

很多人忽略了这一点。

SSE 的一个隐形规则

如果服务端迟迟不发送第一条 data,浏览器会以为连接失败

建议做法

AI 服务端:

emitter.send(" "); // 先发一个空事件 

Gateway 才会立刻把连接“刷”给客户端。

九、排查 SSE 在 Gateway 卡死的 checklist

当你遇到“能连但不流”的情况,按顺序查:

十、我的最终经验总结

SSE 在 Gateway 下不是“配置问题”,而是“思维问题”

你必须接受:

一旦你试图:

👉 流式必死。

十一、什么时候我会“绕开 Gateway”?

说一句大实话:

👉 我会让前端直连 AI 服务

Gateway 只做:

十二、写在最后

如果你在做:

那你迟早会和 SSE + Gateway 正面交锋。

到此这篇关于浅谈Spring Cloud Gateway 转发 SSE 的那些坑的文章就介绍到这了,更多相关Spring Cloud Gateway 转发 SSE内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文