Mám metodu
@Service
public class MyService {
public Mono<Integer> processData() {
... // very long reactive operation
}
}
V normální tok programu, jsem volat tuto metodu asynchronně prostřednictvím Kafka události.
Pro účely testování jsem třeba odhalit způsob, jak webové služby, ale tato metoda by měla být vystavena jako asynchronní: vrací pouze HTTP kód 200 OK ("žádost přijata") a dalšího zpracování dat na pozadí.
Je to OK (= nebude to mít žádné nežádoucí vedlejší účinky) jen volat Mono#subscribe()
a vrátit se z regulátoru metodou?
@RestController
@RequiredArgsConstructor
public class MyController {
private final MyService service;
@GetMapping
public void processData() {
service.processData()
.subscribeOn(Schedulers.boundedElastic())
.subscribe();
}
}
Nebo je to lepší udělat to takhle (tady jsem zmaten varování od IntelliJ, možná stejné jako 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();
}
Nebo nějaké jiné řešení?