J'ai une méthode
@Service
public class MyService {
public Mono<Integer> processData() {
... // very long reactive operation
}
}
Dans le flux de programme normal, j'appelle cette méthode de manière asynchrone via un Kafka de l'événement.
Pour des fins de test, j'ai besoin d' exposer la méthode comme un service web, mais la méthode doit être exposée en tant que asynchrone: retour uniquement code HTTP 200 OK ("demande acceptée") et poursuivre le traitement des données en arrière-plan.
Est-il OK (= ne pas avoir tous les effets secondaires indésirables) juste pour appeler Mono#subscribe()
et de retour de la méthode de contrôleur?
@RestController
@RequiredArgsConstructor
public class MyController {
private final MyService service;
@GetMapping
public void processData() {
service.processData()
.subscribeOn(Schedulers.boundedElastic())
.subscribe();
}
}
Ou est-il mieux de faire comme ceci (ici, je suis confus par l'avertissement de l'Ide, peut-être le même 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();
}
Ou une autre solution?