Mám metóda
@Service
public class MyService {
public Mono<Integer> processData() {
... // very long reactive operation
}
}
V normálnom priebehu programu, pozývam táto metóda asynchrónne cez Kafka udalosti.
Pre účely testovania potrebujem vystaviť metódu, ako webovú službu, ale postup by mal byť vystavené asynchrónne: návrate len HTTP kódom 200 OK ("žiadosť prijatá") a ďalšieho spracovania údajov v pozadí.
Je to OK (= nemá to nejaké nežiaduce vedľajšie účinky) stačí zavolať Mono#subscribe()
a vrátiť sa z regulátora metódou?
@RestController
@RequiredArgsConstructor
public class MyController {
private final MyService service;
@GetMapping
public void processData() {
service.processData()
.subscribeOn(Schedulers.boundedElastic())
.subscribe();
}
}
Alebo je lepšie na to, ako je tento (tu som zmätený varovanie z IntelliJ, možno rovnaké ako 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();
}
Alebo nejaké iné riešenie?