如何设置Spring Controller来处理反压请求

时间:2018-05-22 09:54:36

标签: java spring kotlin reactive-programming backpressure

Spring MVC控制器将用作另一个服务的代理,以提供可能的大文件。

为了避免在任何给定时间从内存中的其他服务存储整个WebClient响应,我想使用Spring 5 + Reactor项目的反应属性,并根据浏览器消耗它的响应流。

当前代码如下所示

import org.springframework.stereotype.Controller
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.reactive.function.client.ClientResponse
import org.springframework.web.reactive.function.client.WebClient
import reactor.core.publisher.Mono

@Controller
class ReportController {

    @GetMapping("/reports")
    fun getReport(): Mono<ClientResponse> {
        val webCient = WebClient.create()
        return webCient
                .get()
                .uri("http://localhost:3333/file")
                .exchange()
    }
}

它会导致

java.lang.IllegalStateException: Could not resolve view with name 'reports'.
    at org.springframework.web.reactive.result.view.ViewResolutionResultHandler.lambda$resolveViews$3(ViewResolutionResultHandler.java:277) ~[spring-webflux-5.0.6.RELEASE.jar:5.0.6.RELEASE]
  • 如何配置控制器以处理Mono<ClientResponse>
  • 如果响应类型为Mono,请求会被反压吗?是否需要将其转换为字节块并使其成为Flow
  • Spring文档说明了背压的许多好处,但没有回答上面的问题,也没有对Mono响应发出任何警告。它仍然是反应性的吗?

0 个答案:

没有答案