当前位置: 首页 > article >正文

Spring-Webflux + Reactor + Netty 初体验

安装

        <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

http://www.kler.cn/a/393858.html

相关文章:

  • AI大模型开发架构设计(18)——基于大模型构建企业知识库案例实战
  • Postman上传图片如何处理
  • 【面试题】发起一次网络请求,当请求>=1s,立马中断
  • 性能测试|JMeter接口与性能测试项目
  • JFROG相关API
  • GxtWaitCursor:Qt下基于RAII的鼠标等待光标类
  • LeetCode【0017】电话号码的字母组合
  • Docker 基础命令介绍和常见报错解决
  • scala 迭代更新
  • Spring框架之适配器模式 (Adapter Pattern)
  • 江苏博才众创科技产业园集团拟投资10亿元在泰兴打造汽车零部件产业园
  • c#程序结构
  • 探索 HTTP 请求方法:GET、POST、PUT、DELETE 等的用法详解
  • 低代码、配置式web组态软件
  • Nop平台的定位及发展规划
  • 如何通过AB测试找到最适合的Yandex广告内容
  • 【IC每日一题:IC验证面试_UVM-1】
  • 渐进式JavaScript框架Vue 3 入门
  • 【Linux】内核参数修改
  • 洞察鸿蒙生态,把握开发新机遇
  • kafka生产经验——消费者事务
  • 使用 WebWorker 和 Rust WebAssembly 构建的生命游戏
  • LeetCode【0028】找出字符串中第一个匹配项的下标
  • Python与其他语言比较·练习题 --- 《跟着小王学Python》
  • 汽车共享管理:SpringBoot技术的最佳实践
  • git分支合并到远程后如何回滚合并