我是Spring Reactive编程的新手,我正在开发一个返回Flux的REST端点。 比如说,我在开发一个返回Flux的REST端点。
@PostMapping
public Flux<MyResponse> processRequests(@RequestBody List<MyRequest> requests) {
return Flux.merge(Arrays.asList(dataSource.processRequest(requests.get(0)), dataSource2.processRequest(requests.get(0)))).parallel()
.runOn(Schedulers.elastic()).sequential();
}
示例代码中的每个数据souce(dataSource和dataSource2)都实现了一个像这样的接口。
public interface MyResponseAdapter {
Flux<MyResponse> processRequest(MyRequest request);
}
这段代码工作得很好,它按照预期返回了Flux,但正如你所看到的,这段代码只引用了MyRequest列表中的第一个元素。 我需要做的是为MyRequest列表中的每个元素构造Flux.merge。 谁能给我指出正确的方向?
我想我已经找到了一个简单的解决方案。
List<Flux<MyResponse>> results = new ArrayList<>();
for (MyRequest myRequest : requests ) {
results.add(dataSource.processRequest(myRequest));
results.add(dataSource2.processRequest(myRequest));
}
return Flux.merge(results).parallel().runOn(Schedulers.elastic()).sequential();