我是新手,一般都会对Reactor和反应式编程进行预测.
我目前正在编写一段类似于此的代码:
Mono.just(userId)
.map(repo::findById)
.map(user-> {
if(user == null){
throw new UserNotFoundException();
}
return user;
})
// ... other mappings
Run Code Online (Sandbox Code Playgroud)
这个例子可能很愚蠢,实现这种情况肯定有更好的方法,但重点是:
throw new在map块中使用异常是否错误,或者我应该用return Mono.error(new UserNotFoundException())?替换它?
这两种做法有什么实际区别吗?
在 ProjectReactor 或 Reactive Streams 中,在您 subscribe() 之前不会发生任何事情。
除非有人订阅,否则响应式流数据流不会发生,但我看到所有 REST API(如查找、保存和插入)都没有显式调用订阅,但数据在生产者和订阅者之间流动。
@RestController
class PersonController {
private final PersonRepository repository;
public PersonController(PersonRepository repository) {
this.repository = repository;
}
@GetMapping("/all")
public Flux<Person> index() {
return repository.findAll();
}
@GetMapping("/people")
Flux<String> namesByLastname(@RequestParam Mono<String> lastname) {
Flux<Person> result = repository.findByLastname(lastname);
return result.map(it -> it.getFullName());
}
@PostMapping("/people")
Flux<People> AddPeople(@RequestBody Flux<Person> people) {
return repository.saveAll(people);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我们不需要调用REST 端点的订阅来启动 Project Reactor 中的数据流?
当我从浏览器调用时,REST 端点(HTTP 请求)如何自动订阅 Reactive Streams 以获取数据流?
我在这里错过了什么吗?
reactive-programming project-reactor reactive-streams spring-webflux