下面我们先通过一个简单的 WebFlux 的使用案例,对比正常的 String 返回,Mono
首先创建一个简单的 springboot 项目,导入对应的 webflux 依赖,当然为了方便也导入 lombok 的依赖。
org.springframework.boot spring-boot-starter-webflux org.projectlombok lombok
然后编写对应的 controller 代码即可,如下:
@RestController
@Slf4j
public class TestController {
public String createStr() {
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "some thing";
}
@GetMapping("/1")
public String test1() {
log.info("get start.");
String str = createStr();
log.info("get end.");
return str;
}
@GetMapping("/2")
public Mono testMono() {
log.info("mono start.");
Mono stringMono = Mono.fromSupplier(this::createStr);
log.info("mono end.");
return stringMono;
}
@GetMapping(value = "/3", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux testFlux() {
Flux stringFlux = Flux.fromStream(IntStream.range(1, 5).mapToObj(i -> {
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "flux date--" + i;
}));
return stringFlux;
}
}
代码比较简单,@GetMapping(value = "/3", produces = MediaType.TEXT_EVENT_STREAM_VALUE) ,主要是注意这地方需要加上 produces 属性,值为 text/event-stream(MediaType.TEXT_EVENT_STREAM_VALUE),可以试一试不加会怎么样。
代码就是这么多,下面就可以直接进行测试了,我使用的是 postman 工具进行测试。
从控制台日志也可以看出
在测试一下返回 Mono 类型的,看看结果如何:
同样是 5s 后返回数据,但是我们看一下控制台打印的日志:
最后,我们测试最后一个方法,返回类型 Flux 的,先去除 produces 属性,看看是怎样的结果:
再把 produces 属性配置回去,看看结果,这个我们使用浏览器去测试比较好:
好了,到此我们应该也对 WebFlux 框架有了简单的体会了,案例比较简单,不涉及底层原理。



