• Mono 实现了 org.reactivestreams.Publisher 接口,代表0到1个元素的发布者
    • Flux 同样实现了 org.reactivestreams.Publisher 接口,代表0到N个元素的发布者

    export PATH=/Users/tlc/tools/mongodb-5.0.3/bin:$PATH

    1. @RestController
    2. @Slf4j
    3. public class TestController {
    4. @GetMapping("/1")
    5. private String get1() {
    6. log.info("get1 start");
    7. String result = createStr();
    8. log.info("get1 end.");
    9. return result;
    10. }
    11. @GetMapping("/2")
    12. private Mono<String> get2() {
    13. log.info("get2 start");
    14. Mono<String> result = Mono.fromSupplier(() -> createStr());
    15. log.info("get2 end.");
    16. return result;
    17. }
    18. /**
    19. * Flux : 返回0-n个元素
    20. *
    21. * @return
    22. */
    23. @GetMapping(value = "/3", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    24. private Flux<String> flux() {
    25. Flux<String> result = Flux
    26. .fromStream(IntStream.range(1, 5).mapToObj(i -> {
    27. try {
    28. TimeUnit.SECONDS.sleep(1);
    29. } catch (InterruptedException e) {
    30. }
    31. return "flux data--" + i;
    32. }));
    33. return result;
    34. }
    35. private String createStr() {
    36. try {
    37. TimeUnit.SECONDS.sleep(5);
    38. } catch (InterruptedException e) {
    39. }
    40. return "some string";
    41. }
    42. }