Eu tenho um método
@Service
public class MyService {
public Mono<Integer> processData() {
... // very long reactive operation
}
}
No fluxo normal do programa, eu chamo esse método de forma assíncrona através de um Kafka evento.
Para fins de teste que eu preciso para expor o método como um serviço da web, mas o método deve ser exposto como assíncrona: retornando apenas o código HTTP 200 OK ("solicitação de aceite"), e continuando o processamento de dados no plano de fundo.
É OK (= não tem quaisquer efeitos colaterais indesejados) apenas para chamar Mono#subscribe()
e o retorno do método de controlador?
@RestController
@RequiredArgsConstructor
public class MyController {
private final MyService service;
@GetMapping
public void processData() {
service.processData()
.subscribeOn(Schedulers.boundedElastic())
.subscribe();
}
}
Ou é melhor fazer como esta (aqui estou confuso com o aviso de que o IntelliJ, talvez o mesmo 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 alguma outra solução?