代码之家  ›  专栏  ›  技术社区  ›  Johan

Spring反应式WebClient的请求级反压力?

  •  0
  • Johan  · 技术社区  · 6 年前

    这和 How to do akka-http request-level backpressure? 但是对于春天的回声系统。

    我在考虑如何在以反应式方式使用SpringWebClient时为HTTP客户机实现背压。对我来说,这听起来像是WebClient了解HTTP语义并对状态“429-请求太多”施加反向压力。我没有找到任何关于这方面的文件,这让我有点怀疑这是不是该走的路。

    问题:

    1. 基于HTTP响应头的背压是否合理(例如基于429或503状态代码和 Retry-After 头)?或者是否有更好的方法通过HTTP对 非流式(请求-响应)用例 ?
    2. 类似这样的功能是在WebClient或其他一些与Spring反应式Echo系统配合良好的库中实现的吗?
    3. 如果当前不存在类似的内容,并且考虑到它是有意义的,那么在 稍后重试 页眉?
    1 回复  |  直到 6 年前
        1
  •  2
  •   Brian Clozel    6 年前

    TL;DR:Spring框架和reactor netty不提供这种支持,我也不知道有什么库可以提供这种支持。

    你可以用一个 WebFilter 它在将传入请求发送到处理程序之前拦截它们,并使用您选择的任何HTTP状态/头进行回复。

    唯一棘手的部分是决定是否应该拒绝请求。您可以将固定直通输出配置为不超过或依赖于其他一些JVM度量?

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

    在Spring中的HTTP上下文中,我们在接受新连接时不会强制使用反压力,但是在读/写TCP缓冲区时会使用此信息。这些信息不跨网络,因此我们只依赖于TCP流控制。

    如果您想在协议中获得真正的反压力支持,您需要在协议本身中得到支持。这是什么 the future RSocket support 春天就是一切。