webflux的详细介绍

  引言:上一节已经简单介绍webflux的一些基本概念,本章继续学习webflux的原理和实战方面的东西:

  Spring WebFlux架构:

    

    note:注意理解上面这张图。下面解释引用百度

)服务端技术栈

    Spring提供了完整的支持响应式的服务端技术栈。

            如上图所示,左侧为基于spring-webmvc的技术栈,右侧为基于spring-webflux的技术栈,

            Spring WebFlux是基于响应式流的,因此可以用来建立异步的、非阻塞的、事件驱动的服务。它采用Reactor作为首选的响应式流的实现库,不过也提供了对RxJava的支持。
由于响应式编程的特性,Spring WebFlux和Reactor底层需要支持异步的运行环境,比如Netty和Undertow;也可以运行在支持异步I/O的Servlet .1的容器之上,比如Tomcat(8.0.23及以上)和Jetty(9.0.4及以上)。
从图的纵向上看,spring-webflux上层支持两种开发模式:
类似于Spring WebMVC的基于注解(@Controller、@RequestMapping)的开发模式;
Java lambda 风格的函数式开发模式。
Spring WebFlux也支持响应式的Websocket服务端开发。
由此看来,Spring WebFlux与Vert.x有一些相通之处,都是建立在非阻塞的异步I/O和事件驱动的基础之上的。
)响应式Http客户端 此外,Spring WebFlux也提供了一个响应式的Http客户端API WebClient。它可以用函数式的方式异步非阻塞地发起Http请求并处理响应。其底层也是由Netty提供的异步支持。 我们可以把WebClient看做是响应式的RestTemplate,与后者相比,前者: 是非阻塞的,可以基于少量的线程处理更高的并发;
可以使用Java lambda表达式;
支持异步的同时也可以支持同步的使用方式;
可以通过数据流的方式与服务端进行双向通信。
当然,与服务端对应的,Spring WebFlux也提供了响应式的Websocket客户端API。

springboot_webflux   demo案例:

  根据上面原理图  webflux的实现有两版,一是基于springmvc,一种基于响应式流的,,下面我来逐一介绍一下:(需要学习的尽量跟着我的步骤走,我会把出错的地方标出

  基础部分搭建(不管哪种实现,都需要项目准备工作):

    第一步:引入项目依赖,我后期会演示mongodb的操作,这次一下把依赖都引入:

      

    第二步:把allpication.yml 的mongodb配置上,

      

  

从webflux开始,我的demo采用yaml语法的配置文件来讲解,前面采用的都是properties文件,是为了大家方便入门,后期我采用application.yml文件,
  补充:配置文件的优先顺序: 项目路径下/conf/ > 项目路径下/ > /resources/conf/ > resources/ ( properties后缀优先 yml文件的加载顺序)

  1>注解式:

    1>> 只是为了测试,直接写测试控制器了,实战中应该从Handler中获取

    

    2>>  启动springboot项目:

      是netty启动,上节介绍过,webflux是响应式框架,默认是netty启动(可以改tomcat toncat8以后已经支持响应式了)

      请求测试如下:

      

    

Netty是一套异步的、事件驱动的网络应用程序框架和工具,能够开发高性能、高可靠性的网络服务器和客户端程序,因此与同样是异步的、事件驱动的响应式编程范式吻合。
  在Java 7推出异步I/O库,以及Servlet3.1增加了对异步I/O的支持之后,Tomcat等Servlet容器也随后开始支持异步I/O,然后Spring WebMVC也增加了对Reactor库的支持,
  所以上边如果不是将spring-boot-starter-web替换为spring-boot-starter-WebFlux,而是增加reactor-core的依赖的话,仍然可以用注解的方式开发基于Tomcat的响应式应用。

  注解式就简单介绍一下,重点在响应式开发,webflux是响应式框架,我会着重介绍一下响应式开发的步骤。注解式只是spring团队为了更好的迁移而提供给大家的,因为我们都是用上面那种开发方式开发代码  

  2>webflux的响应式开发:

    响应式开发主要在handler和route上,handler相当于我们原来使用的 server | controller   官方定义是处理,就是写逻辑代码的地方,而route相当于RequestMapping() 相当于配置映射的地方,官方定义是路由

    2.1>测试handler如下: (方法应该从数据获取数据进行返回,我只是做测试,就用打印时间代替了)

     

    2.2> 编辑route 

       

    2.3>启动,测试:

      

在WebFlux中,请求和响应不再是WebMVC中的ServletRequest和ServletResponse,而是ServerRequest和ServerResponse。后者是在响应式编程中使用的接口,它们提供了对非阻塞和回压特性的支持,以及Http消息体与响应式类型Mono和Flux的转换方法。

    注意:到这,webflux的响应式开发配置基本搭建完毕,后面会继续介绍mongodb的操作


webflux操作mongodb:

  webflux不支持mysql,  使用mongodb来进行演示 (mongodb配置已经在准备时配置进去了)   

  第一步:创建实体User

   

  在这个mongodb的启动后,会自动在对应的mongodb中创建一个user集合,名字就是实体类名称小写。

  第二步:dao实现:  

    note:与非响应式Spring Data的CrudReposity对应的,响应式的Spring Data也提供了相应的Repository库:ReactiveCrudReposity,当然,我们也可以使用它的子接口ReactiveMongoRepository

       ReactiveCrudRepository的泛型分别是UserID的类型;

    

  第三步:UserHandler(逻辑处理代码)

    

  第四步:webFlux的注解实现controller: 方便大家上手 ( 响应式后期再说:)

    

  最后启动测试即可:

    截图不放了。下面我介绍几个问题点: 


问题: 

  1>  怎么验证响应式流:

    

    启动测试就可以发现查询所用是一个一个出来的,而不是一下返回。

 


 异步 阻塞的概念还需要大家理解,这是服务端大效果演示,还有一种客户端的演示,待下节介绍

springboot 学习之路 18(webflux详细介绍(2))的更多相关文章

  1. springboot 学习之路 2(注解介绍)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  2. springboot 学习之路 17(webflux 入门 (1))

    Webflux: webflux是在springboot2系列引入的技术:补充一些概念: 1> Reactive Streams 是 JVM 中面向流的库标准和规范: 处理可能无限数量的元素 按 ...

  3. springboot 学习之路 1(简单入门)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  4. springboot 学习之路 3( 集成mybatis )

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  5. springboot 学习之路 6(定时任务)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  6. springboot 学习之路 8 (整合websocket(1))

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  7. springboot 学习之路 6(集成durid连接池)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  8. springboot 学习之路 9 (项目启动后就执行特定方法)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  9. springboot 学习之路 4(日志输出)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

随机推荐

  1. 了解fortran语言

    最近看了一些文献,发现用了Fortran语言编程,并且还是近几年的,了解了之后才知道,其实Fortran已经慢慢没有人再用了,之所有还有一批人在用,极大可能是历史遗留问题吧.而这,也得从Fortran ...

  2. JAVA框架之Hibernate【Hibernate缓存详解】

    1.缓存介绍 Hibernate中提供了两级Cache,第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存.这一级别的缓存由hibernate管理的,一般情况下无需进行干预:第二级别的缓 ...

  3. 【云和恩墨】性能优化:Linux环境下合理配置大内存页(HugePage)

    原创 2016-09-12 熊军 [云和恩墨]性能优化:Linux环境下合理配置大内存页(HugePage)   熊军(老熊) 云和恩墨西区总经理 Oracle ACED,ACOUG核心会员 PC S ...

  4. mycat中间件--linux安装mycat1.6版本

    一.mycat安装前准备1.mycat下载地址,点击此处进行下载2.环境要求如下: mycat使用Java开发,因为用到了JDK 7的部分功能,所以在使用前请确保安装了JDK 7.0,并设置了正确的J ...

  5. jdk1.6空轮询Bug的原因及解决方法

    简述 本文主要介绍一下jdk1.6版本中的NIO Selector空轮询BUG,描述一下BUG的现象及原因,以及Netty中如何巧妙的规避了这个bug. 为什么要写这篇文章,说来惭愧,很久以前面试官问 ...

  6. MVC源码分析 - View续之Razor

    过完年, 大家都忙碌起来了, 我也不例外. 不过并不是忙碌于去面试找工作, 而是忙碌于现在手上的工作. 闲话不多说了, 进入今天的主题. 一.Index页面在哪里 很奇怪, 在目录bin下面的dll文 ...

  7. TCP连接的TIME_WAIT和CLOSE_WAIT 状态解说

    相信很多运维工程师遇到过这样一个情形: 用户反馈网站访问巨慢, 网络延迟等问题, 然后就迫切地登录服务器,终端输入命令"netstat -anp | grep TIME_WAIT | wc ...

  8. Java设计模式学习记录-策略模式

    策略模式 策略模式的定义是:定义了一系列的算法,把它们一个个的封装起来,并且使它们可相互替换,让算法可以独立于使用它的客户而变化. 设计原则是:把一个类中经常改变或者将来可能会经常改变的部分提取出来作 ...

  9. FFmpeg简易播放器的实现-最简版

    本文为作者原创:https://www.cnblogs.com/leisure_chn/p/10040202.html,转载请注明出处 基于FFmpeg和SDL实现的简易视频播放器,主要分为读取视频文 ...

  10. glob 在webpack中的使用。

    glob 在webpack中对文件的路径处理非常之方便,比如当搭建多页面应用时就可以使用glob对页面需要打包文件的路径进行很好的处理. 官方文档地址 : https://www.npmjs.com/ ...