Здравствуйте. Примеров в инете к сожалению не так много.
Простые вещи попробовал, работают.
Но видать, что-то я не очень вкуриваю..
Кто-то уже игрался, работает с WebFlux? Может подсказать?
Идея. Запустить процесс и построчно передавать логи в браузер. Хочу это сделать именно с WebFlux.
Но что-то не очень пляшет..
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
@RequestMapping("/cmd")
public Flux<String> cmd() throws IOException, InterruptedException {
return Flux.fromStream(cmdTest()).delayElements(Duration.ofMillis(100));
}
public Stream<String> cmdTest() throws IOException {
ProcessBuilder builder = new ProcessBuilder();
builder.command("java", "-jar", "E:\\ca-runner.jar");
Process process = builder.start();
// Mono.fromCallable(() -> new BufferedReader(new InputStreamReader(process.getInputStream())).lines()).flatMapMany(Flux::fromIterable);
return new BufferedReader(new InputStreamReader(process.getInputStream())).lines();
}
Получаю
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Fri Apr 26 20:22:28 CEST 2019
There was an unexpected error (type=Internal Server Error, status=500).
Multi-value reactive types not supported in view resolution: reactor.core.publisher.Flux<java.lang.String>
java.lang.IllegalArgumentException: Multi-value reactive types not supported in view resolution: reactor.core.publisher.Flux<java.lang.String>
at org.springframework.web.reactive.result.view.ViewResolutionResultHandler.handleResult(ViewResolutionResultHandler.java:183)
at org.springframework.web.reactive.DispatcherHandler.handleResult(DispatcherHandler.java:174)
at org.springframework.web.reactive.DispatcherHandler.lambda$handle$2(DispatcherHandler.java:152)
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:118)
at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1505)
at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:241)
at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:73)
.....
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Assembly trace from producer [reactor.core.publisher.MonoFlatMap] :
reactor.core.publisher.Mono.flatMap(Mono.java:2491)
org.springframework.web.reactive.DispatcherHandler.handle(DispatcherHandler.java:152)
Error has been observed by the following operator(s):
|_ Mono.flatMap ⇢ org.springframework.web.reactive.DispatcherHandler.handle(DispatcherHandler.java:152)
|_ Mono.defer ⇢ org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
|_ Mono.defer ⇢ org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
Спасибо!