栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【WEB篇】Spring Boot 整合 Webflux

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【WEB篇】Spring Boot 整合 Webflux

WebFlux

Spring WebFlux 是一个异步非阻塞式的 Web 框架,它能够充分利用多核 CPU 的硬件资源去处理大量的并发请求。

WebFlux 内部使用的是响应式编程(Reactive Programming),以 Reactor 库为基础, 基于异步和事件驱动,可以让我们在不扩充硬件资源的前提下,提升系统的吞吐量和伸缩性。WebFlux 并不能使接口的响应时间缩短,它仅仅能够提升吞吐量和伸缩性。

Spring Reactor

Spring Reactor 是一个反应式库,用于根据反应式流规范在 JVM 上构建非阻塞应用。它是完全非阻塞的,支持反应流背压,并在 Netty,Undertow 和 Servlet 3.1+容器等服务器上运行。

Reactor 项目提供两种类型的发布者:

  • Flux 是产生 0 到 N 个值的发布者,返回多个元素的操作使用此类型。
  • Mono 是产生 0 到 1 值的发布者,它用于返回单个元素的操作。
Spring Boot 整合 Webflux

Demo 地址:mingyue-springboot-webflux

1.引入依赖

    org.springframework.boot
    spring-boot-starter-webflux

2.启动项目

容器已经从默认的 Tomcat 缓存了 webflux 默认的 Netty

2022-04-21 15:15:55.791  INFO 38672 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 8080
2022-04-21 15:15:55.798  INFO 38672 --- [           main] .m.w.MingYueSpringbootWebfluxApplication : Started MingYueSpringbootWebfluxApplication in 2.47 seconds (JVM running for 3.95)
3.编写接口
  • Model

    import lombok.AllArgsConstructor;
    import lombok.Builder;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import lombok.ToString;
    
    
    @Data
    @ToString
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public class MingYueUser {
      private Long userId;
      private String username;
    }
    
  • Service

    import cn.hutool.core.map.MapUtil;
    import com.csp.mingyue.webflux.model.MingYueUser;
    import java.util.Map;
    import org.springframework.stereotype.Service;
    
    
    @Service
    public class MingYueUserService {
    
      
      private static final Map USER_MAP = MapUtil.newHashMap();
    
      static {
        USER_MAP.put(1L, MingYueUser.builder().userId(1L).username("mingyue").build());
      }
    
      
      public MingYueUser queryUserById(Long userId) {
        return USER_MAP.get(userId);
      }
    }
    
  • Controller

    import com.csp.mingyue.webflux.model.MingYueUser;
    import com.csp.mingyue.webflux.service.MingYueUserService;
    import lombok.RequiredArgsConstructor;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import reactor.core.publisher.Mono;
    
    
    @RestController
    @RequiredArgsConstructor
    @RequestMapping("/user")
    public class MingYueUserController {
    
      private final MingYueUserService mingYueUserService;
    
      @GetMapping("/{userId}")
      public Mono queryUserById(@PathVariable Long userId) {
        return Mono.just(mingYueUserService.queryUserById(userId));
      }
    }
    
4.测试接口

访问:http://127.0.0.1:8080/user/1

{
    "userId": 1,
    "username": "mingyue"
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/820894.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号