在弹簧卷材中立即返回

时间:2018-02-08 10:55:47

标签: 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等待并响应整个流量的流量。

1 个答案:

答案 0 :(得分:1)

如果我正确理解你想要做什么,我可以建议你使用不同的设计。

不要在你的(我认为是)控制器上面创建一个Flux。相反,你可以在你的应用程序中创建一个Hot Steam实例(在你的上下文中可能是一个Bean),然后像这样使用那个实例:

myHotStream.next(item);

你app中的另一个组件可以使用相同的实例来订阅它。

请阅读此处的文档:http://projectreactor.io/docs/core/release/reference/#reactor.hotCold 另一个例子here,章节 8。热流

修改

只是一个旁注。通常 HTTP 201 Created 意味着已成功创建实体。如果在发送响应后异步发生此创建,则最好发送 HTTP 200 OK 。您无法保证创建成功,但您可以确认已成功接收请求(例如:通过验证)。