Я пытаюсь выполнить следующие действия в реакторе проекта:
- Попробуйте выполнить операцию на срок до х
- Тайм-аут, если не завершен
- отменить / kill процесса, который был порожден
- , затем повторите операцию снова x раз
Вот пример кода для демонстрации:
AtomicInteger i = new AtomicInteger();
int finalRunNumber = Mono.fromFuture(() -> CompletableFuture.supplyAsync(() -> {
int runNumber = i.incrementAndGet();
System.out.println("Started run: " + runNumber);
try {
Thread.sleep(Duration.ofSeconds(5).minusSeconds(runNumber).toMillis());
} catch (InterruptedException e) {
System.out.println("Interrupted run: " + runNumber);
throw new RuntimeException(e);
}
System.out.println("Finished run: " + runNumber);
return runNumber;
}))
.timeout(Duration.ofMillis(2_500))
.doFinally(signalType -> {
System.out.println("doFinally signal: " + signalType);
})
.retry(4)
.block();
System.out.println("Final returned run number: " + finalRunNumber);
, который выдает журнал заявление о:
Started run: 1
Started run: 2
doFinally signal: onError
Finished run: 1
Started run: 3
doFinally signal: onError
Finished run: 2
Finished run: 3
Final returned run number: 3
Как мне сделать так, чтобы он выдавал журнал, который может отменить бортовой CompletableFutures, и выдавать журнал как:
Started run: 1
Started run: 2
Interrupted run: 1
doFinally signal: onError
Started run: 3
Interrupted run: 2
doFinally signal: onError
Finished run: 3
Final returned run number: 3
Просмотр реактора проекта Документация Mono.fromFuture в нем есть примечание о том, что будущее не отменяется и должно быть отменено в doFinally, в котором нет ссылки на CompletableFuture
, сгенерированный из Supplier
(необходим для повторных попыток работать), следовательно, на CompletableFuture
, как видно из документации, не существует способа вызвать отмену вызова. У кого-нибудь еще есть идеи, как это сделать? 1028 *? 1027 *