相关疑难解决方法(0)

Spring Reactive Webclient 的请求级背压?

这类似于如何做 akka-http 请求级背压?但对于 Spring 回声系统。

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

问题:

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

spring spring-boot project-reactor spring-webflux

3
推荐指数
1
解决办法
1348
查看次数

Spring Webflux - 如何在 WebFilter 中调用反应式端点

我想实现一个 WebFilter,它读取传入请求的特定标头,使用此标头的值将 GET 请求调用到另一个反应式 REST 端点,然后使用 GET 响应的值改变原始请求。

我想在 WebFilter 中实现它,因为我不想将此函数调用添加到我的@RestController.

目前我有这个:

@Component
class ExampleWebFilter(val webClients: WebClients) : WebFilter {
    override fun filter(exchange: ServerWebExchange, chain: WebFilterChain): Mono<Void> {
        println(exchange.request.headers)
        println(exchange.request.path)
        println(exchange.response)

        val test = webClients.internalAuthServiceClient.get()
                .uri("/api/authorisation/v1/test")
                .header("authToken", "authToken123")
                .retrieve().bodyToMono(String::class.java)

        println(test)

        exchange.mutate().request(
                exchange.request.mutate().header("newheader", test).build()
        )
        return chain.filter(exchange)
    }
}

@Component
class WebClients() {
    val internalAuthServiceClient = WebClient.builder()
            .baseUrl("lb://auth-service")
            .build()
}

Run Code Online (Sandbox Code Playgroud)

这显然现在行不通。我的 WebClient 正在返回 Mono,所以我不能直接在我的mutate()调用中使用它,因为这需要一个字符串。由于显而易见的原因,我也无法真正让 WebClient 调用阻塞操作。

有谁知道我如何解决这个问题?

spring spring-boot spring-webflux

2
推荐指数
1
解决办法
2238
查看次数