小编edw*_*fox的帖子

如何提出真正的通量请求?

我开始从Spring-boot学习Webflux。我了解到,对于 RestController 的端点,您可以定义一个 Flux 请求主体,其中我期望一个真正的通量流,即整个请求的各个部分一个接一个地出现,并且这些部分也可以一个接一个地处理。然而,在使用客户端和服务器构建了一个小示例之后,我无法让它按预期工作。

这是服务器的片段:

@PostMapping("/digest")
    public Flux<String> digest(@RequestBody Flux<String> text) {
        continuousMD5.reset();
        return text.log("server.request.").map(piece -> continuousMD5.update(piece)).log("server.response.");
    }
Run Code Online (Sandbox Code Playgroud)

注意:每一段文本都会被发送到一个 ContinuousMD5 对象,该对象会累加所有的段,并计算并返回每次累加后的中间 MD5 哈希值。MD5 计算之前和之后都会记录流。

这是客户端的片段:

@PostConstruct
    private void init() {
        webClient = webClientBuilder.baseUrl(reactiveServerUrl).build();
    }

@PostMapping(value = "/send", consumes = MediaType.TEXT_PLAIN_VALUE)
    public Flux<String> send(@RequestBody Flux<String> text) {
        return webClient.post()
            .uri("/digest")
            .accept(MediaType.TEXT_PLAIN)
            .body(text.log("client.request."), String.class)
            .retrieve().bodyToFlux(String.class).log("client.response.");
    }
Run Code Online (Sandbox Code Playgroud)

注意:客户端接受一些文本的通量流并记录该流并将其发送到服务器(作为通量流)。

令人惊讶的是,我可以通过以下命令行发送 REST 请求并让客户端接收通量流:

@PostConstruct
    private void init() {
        webClient = webClientBuilder.baseUrl(reactiveServerUrl).build();
    }

@PostMapping(value = "/send", consumes = MediaType.TEXT_PLAIN_VALUE)
    public Flux<String> send(@RequestBody Flux<String> text) { …
Run Code Online (Sandbox Code Playgroud)

java spring-boot spring-webflux

6
推荐指数
1
解决办法
2378
查看次数

标签 统计

java ×1

spring-boot ×1

spring-webflux ×1