我正在尝试创建应该返回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等待并响应整个流量的流量。
答案 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 。您无法保证创建成功,但您可以确认已成功接收请求(例如:通过验证)。