Ho un metodo
@Service
public class MyService {
public Mono<Integer> processData() {
... // very long reactive operation
}
}
Nel normale flusso del programma, io chiamo questo metodo in modo asincrono tramite un Kafka evento.
Per scopi di test ho bisogno di esporre il metodo di servizio web, ma il metodo deve essere esposto come asincrona: restituzione del solo codice HTTP 200 OK ("richiesta accettata") e la continuazione del trattamento dei dati in background.
È OK (= non si hanno effetti collaterali indesiderati) e chiamare Mono#subscribe()
e ritorno dal metodo controller?
@RestController
@RequiredArgsConstructor
public class MyController {
private final MyService service;
@GetMapping
public void processData() {
service.processData()
.subscribeOn(Schedulers.boundedElastic())
.subscribe();
}
}
O è meglio farlo (qui mi sono confuso con l'avviso da parte di IntelliJ, forse la stessa 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 qualche altra soluzione?