Spring Reactive Webclient 的请求级背压?

2024-04-30

这类似于akka-http请求级反压怎么做? https://stackoverflow.com/questions/46738696/how-to-do-akka-http-request-level-backpressure但对于 Spring echo 系统。

我正在考虑如何在以反应方式使用 Spring WebClient 时为 HTTP 客户端实现背压。对我来说,听起来 WebClient 应该了解 HTTP 语义并对例如应用程序施加反压。状态“429 - 请求过多”。我没有找到任何关于此的文档,这让我有点怀疑这是否是正确的方法。

问题:

  1. 基于 HTTP 响应标头的背压是否有意义(例如基于 429 或 503 状态代码和Retry-After标题)?或者有没有更好的方法通过 HTTP 进行背压非流(请求-响应)用例?
  2. 类似的东西是否在 Webclient 或其他一些与 Spring 反应式回显系统配合良好的库中实现?
  3. 如果当前不存在这样的情况并且考虑到它有意义,那么简单地使用中设置的超时重试是否有意义Retry-After header?

TL;DR:Spring Framework 和 Reactor Netty 不提供这种支持,而且我不知道有任何库可以做到这一点。

您可以使用以下方法来实现您所描述的行为WebFilter在将传入请求分派给处理程序之前拦截它们,并使用您选择的任何 HTTP 状态/标头进行回复。

唯一棘手的部分是决定是否应拒绝该请求。您可以配置一个不超过的固定吞吐量,或者依赖其他一些 JVM 指标?

现在我不会称之为“背压”,至少在 Spring 的背景下不会。在反应流中,背压大致意味着消费者向生产者提供有关其可以发送的消息数量的信息。根据规范,客户端发送的消息不能多于允许的数量。

在 Spring 的 HTTP 上下文中,我们在接受新连接时不强制执行背压,但在读/写 TCP 缓冲区时会使用此信息。此信息不会跨网络,因此我们在这里仅依赖 TCP 流量控制。

如果您希望协议中提供真正的背压支持,则需要协议本身支持这一点。这是什么未来的 RSocket 支持 http://rsocket.io春天就是这样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Reactive Webclient 的请求级背压? 的相关文章

随机推荐