Mam metodę
@Service
public class MyService {
public Mono<Integer> processData() {
... // very long reactive operation
}
}
W normalnym strumieniu programu wzywam ta metoda asynchronicznie przez zdarzenie Kafki.
Dla celów testowania muszę przedstawić sposób jak usługi sieci web, ale metoda musi być przedstawiony jako asynchroniczny: zwrócić HTTP-kod 200 OK ("zlecenie") i kontynuować przetwarzanie danych w tle.
Normalnie czy (= czy nie ma żadnych niepożądanych efektów ubocznych) po prostu zadzwonić Mono#subscribe()
i wrócić z metody kontrolera?
@RestController
@RequiredArgsConstructor
public class MyController {
private final MyService service;
@GetMapping
public void processData() {
service.processData()
.subscribeOn(Schedulers.boundedElastic())
.subscribe();
}
}
Czy lepiej zrobić to tak (tutaj nie jestem pewna ostrzeżenie od IntelliJ, być może to samo, co 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();
}
Lub jakieś inne rozwiązanie?