0

我们在 Apache httpd 负载均衡器后面提供 Helidon MP Rest-Services。以下星座导致 JerseySupport 服务执行程序队列卡住。

客户端向我们的 rest 服务发送一个 POST 请求,其中包含一个 json 有效负载和一个Expect 100-continue Header。Apache 负载均衡器将请求发送到后端。后端接受请求并启动 JerseySupport 可运行的等待传入数据,然后后端向 LB 发送响应以启动流(响应状态 100)。如果此时客户端请求超过负载均衡器连接超时,负载均衡器会通过代理错误切断与调用客户端的连接,但后端服务不会收到通知并永远等待。

问题是 io.helidon.webserver.ForwardingHandler 仅在发送 LastHttpContent 消息时才完成 http 内容发布者,而这永远不会发生。如果发布者从未完成,则等待 JerseySupport 服务实例中的订阅者永远阻塞服务器执行器实例。如果这种情况发生多次,整个 rest 服务就会被阻塞。

我没有发现在 helidon 中配置相应的超时来中断 JerseySupport 服务的可能性,也没有发现让 apache 负载均衡器适当地结束与后端的连接的可能性。

除了禁用 100-continue 流媒体之外,你们中是否有人注意到类似的问题或找到了解决方法。

Helidon 版本:1.4.4 Apache 版本:2.4.41

提前致谢

4

0 回答 0