我正在尝试创建应该返回 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");
我希望 Flux 部分在后台发生,但截至目前,一旦整个 Flux 被传输,API 就会等待并响应。
如果我正确理解您想要做什么,我可以建议您使用不同的设计。
不要在上面的(我认为是)控制器中创建 Flux。相反,您可以在应用程序中创建 Hot Stream 的实例(可以是您上下文中的 Bean),然后像这样使用该实例:
myHotStream.next(item);
应用程序中的另一个组件可以使用同一实例来订阅它。
阅读此处的文档:http://projectreactor.io/docs/core/release/reference/#reactor.hotCold http://projectreactor.io/docs/core/release/reference/#reactor.hotCold另一个例子here http://www.baeldung.com/reactor-core, 章节8. 热门直播
Edit
只是一个旁注。通常HTTP 201 已创建意味着实体已成功创建。如果这creation发送响应后异步发生,最好发送一个HTTP 200 正常反而。您不能保证creation已成功,但您可以传达请求已成功接收(例如:通过验证)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)