Am o metoda
@Service
public class MyService {
public Mono<Integer> processData() {
... // very long reactive operation
}
}
În program normal de curgere, eu numesc această metodă asincron prin intermediul unui Kafka eveniment.
Pentru testare am nevoie pentru a expune metoda ca un serviciu web, dar metoda ar trebui să fie expuse ca asincron: revenind doar codul HTTP 200 OK ("cerere acceptată") și continuând cu prelucrarea datelor în fundal.
Este OK (= nu au nici efecte secundare nedorite) doar pentru a apela Mono#subscribe()
și de a reveni de la operator metoda?
@RestController
@RequiredArgsConstructor
public class MyController {
private final MyService service;
@GetMapping
public void processData() {
service.processData()
.subscribeOn(Schedulers.boundedElastic())
.subscribe();
}
}
Sau este mai bine să facă așa (aici sunt confuz de avertizare de IntelliJ, poate la fel ca 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();
}
Sau o alta solutie?