安装
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency>
接口
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;import java.util.stream.Stream;/*** 功能描述** @author jason*/
@RestController
@RequestMapping("/test")
public class TestController {/*** http://127.0.0.1:8081/test/hello*/@GetMapping("/hello")public String hello() {long start = System.currentTimeMillis();String helloStr = getHelloStr();System.out.println("普通接口耗时:" + (System.currentTimeMillis() - start));return helloStr;}/*** http://127.0.0.1:8081/test/helloWebMono*/@GetMapping("/helloWebMono")public Mono<String> hello0() {long start = System.currentTimeMillis();Mono<String> hello0 = Mono.fromSupplier(this::getHelloStr);System.out.println("WebFlux 接口耗时:" + (System.currentTimeMillis() - start));
// hello0.subscribe(result -> System.out.println("回调结果:" + result));return hello0;}/*** http://127.0.0.1:8081/test/helloWebFlux*/@GetMapping("/helloWebFlux")public Flux<String> hello1() {long start = System.currentTimeMillis();Flux<String> hello0 = Flux.fromStream(this::getHelloList);System.out.println("WebFlux 接口耗时:" + (System.currentTimeMillis() - start));
// hello0.subscribe(result -> System.out.println("回调结果:" + result));return hello0;}/*** http://127.0.0.1:8081/test/stream*/@GetMapping("/stream")public Flux<String> stream() {Flux<String> fromStream = Flux.fromStream(this::getHelloList);return fromStream.log();}private String getHelloStr() {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}return "hello";}private Stream<String> getHelloList() {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}return Stream.of("Hello", "Spring", "Webflux");}}
控制台
对于前端来说,响应速度是一致的,但系统的吞吐量提高了
Netty started on port 8081 (http)普通接口耗时:2003
WebFlux 接口耗时:0
源码
https://gitee.com/zhaomingjian/workspace_jason_demo/tree/master/spring-boot-webflux