Tengo un método
@Service
public class MyService {
public Mono<Integer> processData() {
... // very long reactive operation
}
}
En el normal flujo del programa, llamo a este método de forma asincrónica a través de un Kafka evento.
Para propósitos de prueba tengo que exponer el método de un servicio web, pero el método debe ser expuesto como asincrónica: regresar solo código HTTP 200 OK ("solicitud aceptada") y continuar con el procesamiento de datos en segundo plano.
Es ACEPTAR (= no tiene efectos secundarios no deseados), sólo para llamar Mono#subscribe()
y volver por el método de controlador?
@RestController
@RequiredArgsConstructor
public class MyController {
private final MyService service;
@GetMapping
public void processData() {
service.processData()
.subscribeOn(Schedulers.boundedElastic())
.subscribe();
}
}
O es mejor hacerlo de esta manera (aquí estoy confundido por la advertencia de IntelliJ, tal vez el mismo que 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();
}
O alguna otra solución?