【发布时间】:2020-01-02 15:37:11
【问题描述】:
我的 REST 控制器方法应该返回 Mono,它必须由 2 个并行请求构建到另一个 Web 服务并处理它们的响应,其中一个请求返回 Mono,另一个请求返回 Flux
如何将 Mono 和 Flux 的响应结合起来处理?
型号:
@Document
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ClassModel {
@Id
private String id;
private String roomNr;
private String className;
private String teacherId;
private List<String> studentIds;
public void addStudentId(String studentId) {
studentIds.add(studentId);
}
}
控制器:
public Mono<ClassModel> addRandomClassFull() {
return Mono.zip(
//request teacher microservice and return Mono - single teacher
reactiveNetClient.addRandomTeacher(),
//request students microservice and return Flux - list of students
reactiveNetClient.addRandomStudents(10),
(teacher, students) -> {
ClassModel classModel = new ClassModel();
classModel.setRoomNr("24B");
classModel.setClassName(faker.educator().course());
classModel.setTeacherId(teacher.getId());
students.forEach(student -> classModel.addStudentId(student.getId());
return classModel;
}).flatMap(classRepository::save);
}
显然,控制器是错误的:
1) Mono.zip() 需要 2 个或更多 Mono,我有 Mono 和 Flux - 如何组合它们?
2) 也不确定:students.forEach(student -> classModel.addStudentId(student.getId());
是正确的方法吗?
有什么建议吗?
【问题讨论】:
标签: mono flux project-reactor