[Reactor]Combiner des mono et Flux avec
Bonjour,
je débute avec la programmation réactive et je suis confronté à un problème de compréhension....
Je ne sais pas quelle méthode utiliser pour combiner le résultat de plusieurs microservice dans un seul et même objet
Pour consommer les différents microservices, j'utilise WebClient.
Le premier résultat se fait de façon bloquante car c'est "l'objet principal" qui me permet d'aller récupérer ensuite les informations dans les autres microservices
Les autres appels peuvent se faire de façon asynchrone
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
@GetMapping("/operation-detail/{id}")
public Mono<OperationDetailDto> getListOfOperations(@PathVariable(name = "id") String operationId){
OperationFullDto operation =
webClient.build()
.get().uri("lb://operation-query-microservice/operation/" + operationId)
.retrieve()
.bodyToMono(OperationFullDto.class)
.block();
Flux<OuvrageDto> ouvrages =
webClient.build()
.get().uri("lb://ouvrage-microservice/ouvrage/"+operation.getOuvrages())
.retrieve()
.bodyToFlux(OuvrageDto.class);
Flux<PersonneDto> chefEus =
webClient.build()
.get().uri("lb://personne-microservice/personne/"+operation.getChefEus())
.retrieve()
.bodyToFlux(PersonneDto.class);
Flux<PersonneDto> donneurOrdre =
webClient.build()
.get().uri("lb://personne-microservice/personne/"+operation.getChefEus())
.retrieve()
.bodyToFlux(PersonneDto.class);
Mono<OperationDetailDto> operationDetail =
//ToDo
return operationDetail;
} |
OperationFullDto
Code:
1 2 3 4 5 6 7 8 9 10 11
|
public class OperationFullDto {
private UUID id;
private String titre;
private List<Long> ouvrages;
private List<Long> chefEus;
private List<Long> donneurOrdres;
...
} |
OuvrageDto
Code:
1 2 3 4 5 6 7 8
|
public class OuvrageDto {
private Long id;
private TypeDto type;
private String organisation;
...
} |
PersonneDto
Code:
1 2 3 4 5 6 7 8 9 10
|
public class PersonneDto {
private Long id;
private String name;
private String surname;
private String email;
private List<Role> roles;
} |
OperationDetailDto
Code:
1 2 3 4 5 6 7 8 9
|
public class OperationDetailDto {
private UUID id;
private String titre;
private List<OuvrageDto> ouvrages;
private List<PersonneDto> chefEus;
private List<PersonneDto> donneurOrdres;
...
} |
Savez-vous quelle méthode est plus appropriée pour faire mon appel bloquant puis les x appels asynchrone ?
Comment puis combiner le résultat dans un seul est même objet (OperationDétailDto) ?
merci pour vos éclaircissements