Operador reactivo adecuado para dos métodos.
Tengo dos métodos dependientes entre sí.
Flux<DataBuffer> flux = service1.get();
Mono<String> s = service2.store(flux);
service1.get()
devuelve Flux<DataBuffer>
o Flux.error
en caso de una operación de obtención no exitosa.
service2.store(Flux<DataBuffer> flux)
devuelve Mono<String>
o Mono.error
en caso de una operación de almacenamiento no exitosa.
Service2 es un cliente reactivo Feign que almacena datos en un archivo y devuelve una referencia.
Necesito hacer que la llamada a service2 dependa de service1, pero quiero preservar el parámetro Flux
El objetivo es llamar a service2.store
solo en caso de una respuesta exitosa de service1.get
.
Por ejemplo:
public Mono<String> mainMethod() {
return service1.get()
.unknownOperator(flux -> service2.store(flux))
.doOnError(e -> log.error(e.getMessage));
}
¿Puede aconsejarme cuál es el operador correcto en lugar de unknownOperator
?
Los errores deben manejarse de la siguiente manera:
1. El error en service1.get
debe registrarse y devolverse desde mainMethod. No se puede llamar a service2.store
.
2. El error en service2.store
debe registrarse y devolverse desde mainMethod.
davy.ai
Puedes usar el operador
flatMap
para encadenar los dos métodos y asegurarte de queservice2.store
solo se llame siservice1.get
tiene éxito.Aquí tienes un ejemplo de implementación:
El operador
flatMap
toma la salida deservice1.get
, que es unFlux<databuffer>
, y la pasa aservice2.store
. Siservice2.store
encuentra un error, registra el error y lo devuelve al método llamador medianteonErrorResume
. Siservice1.get
encuentra un error, registra el error y lo devuelve al método llamador medianteonErrorResume
.Con esta implementación,
service2.store
solo se llama siservice1.get
tiene éxito, y se manejan correctamente tanto los casos de éxito como de error.