Lok*_*a S 6 spring project-reactor spring-webflux
我正在尝试创建应该返回 201 响应的框架。当向 API 发出请求时,我想立即发回响应并在后台处理请求。
Flux.fromIterable(request.getApiRequests()).log().flatMap(item -> {
        WebClient.RequestHeadersSpec apiCallSpec = WebClient.create(request.getBasePath())
                .method(item.getHttpMethod()).uri(item.getPath()).accept(MediaType.valueOf(item.getAccept()))
                .contentType(MediaType.valueOf(item.getContentType())).body(BodyInserters.fromObject(item.getPayload()));
        return apiCallSpec.retrieve().bodyToMono(String.class);
    }).subscribe();
    return Mono.just("Created");
我希望通量部分发生在后台,但截至目前,一旦整个通量被流式传输,API 就会等待并响应。
如果我正确理解您想要做什么,我可以建议您使用不同的设计。
不要在上面的(我认为是)控制器中创建 Flux。相反,您可以在应用程序中创建 Hot Stream 的实例(可以是您上下文中的 Bean),然后像这样使用该实例:
myHotStream.next(item);
应用程序中的另一个组件可以使用同一实例来订阅它。
请阅读此处的文档:http://projectreactor.io/docs/core/release/reference/#reactor.hotCold此处 还有另一个示例,第8 章。 Hot Streams
编辑
只是一个旁注。通常HTTP 201 Created意味着实体已成功创建。如果此创建在您发送响应后异步发生,则最好发送HTTP 200 OK。您不能保证创建成功,但您可以传达请求已成功接收(例如:通过验证)。
| 归档时间: | 
 | 
| 查看次数: | 4813 次 | 
| 最近记录: |