当前位置: 首页 > 知识库问答 >
问题:

Spring Boot 2 reactive webflux

唐焕
2023-03-14
@org.springframework.web.bind.annotation.RestController
public class RestController {

  @Autowired
  NoteDao noteDao;

  /* non-reactive */
  @RequestMapping("/hello")
  public String sayHello(){
    return "Hello pal";
  }

  /* reactive */
  @RequestMapping("/hello/reactive")
  public Mono<String> sayHelloReactively(){
    return Mono.just("Hello reactively, pal!");
  }

  /* non-reactive */
  @RequestMapping("/notes")
  public List<Note> getAllNotes(){
    return noteDao.findAll();
  }

  /* reactive */
  @RequestMapping("/notes/reactive")
  public Flux<List<Note>> getAllNotesReactively(){
    return Flux.just(noteDao.findAll());
  }

}

共有1个答案

权兴为
2023-03-14

sayHellosayHelloReactivity都可以被认为是反应式的-您基本上是从内存中返回一些东西,不涉及I/O。第二个方法无缘无故地包装字符串值--这两个方法是等效的。

reactive背后的核心思想是,对于涉及I/O操作的所有操作(例如,从网络上读写),代码不应该在等待结果(REST调用、数据库查询)返回时无所事事。您可以将其视为回调,加上许多附加功能,如反压。

因为noteDAO公开同步+阻塞方法,所以不能调用一个方法并在结果出来后立即得到通知。用flux.just包装阻塞调用只会使事情变得更糟。在WebFlux应用程序中,只有很少的线程--如果这样做,每个调用都会阻塞一个线程--那么很容易使应用程序完全崩溃。

 类似资料:

相关问答

相关文章

相关阅读