У меня есть метод
@Service
public class MyService {
public Mono<Integer> processData() {
... // very long reactive operation
}
}
В обычном потоке программы я вызываю этот метод асинхронно через событие Кафки.
Для целей тестирования мне нужно представить метод как веб-службу, но метод должен быть представлен как асинхронный: возвращать только HTTP-код 200 OK ("запрос принят") и продолжать обработку данных в фоновом режиме.
Нормально ли (= нет ли у этого каких-либо нежелательных побочных эффектов) просто позвонить Mono#subscribe()
и вернуться из метода контроллера?
@RestController
@RequiredArgsConstructor
public class MyController {
private final MyService service;
@GetMapping
public void processData() {
service.processData()
.subscribeOn(Schedulers.boundedElastic())
.subscribe();
}
}
Или лучше сделать это так (здесь меня смущает предупреждение от IntelliJ, может быть, то же самое, что https://youtrack.jetbrains.com/issue/IDEA-276018 ?):
public Mono<Void> processData() {
service.processData()
.subscribeOn(Schedulers.boundedElastic())
.subscribe(); // IntelliJ complains "Inappropriate 'subscribe' call" but I think it's a false alarm in my case(?)
return Mono.empty();
}
Или какое-то другое решение?