响应式编程(二)

一、Lifecycle

二、综合实战

三、现代分布式系统复杂的网络通信挑战

最大问题一个Http请求对应一个Thread

同步模型 vs 异步模型 (thread pre request vs reactor)

轮询所有事件,经典事件驱动模型,好处是一个线程不止服务一个请求,但是编写代码困难,需要知道哪个请求每次写几个字节去维护状态

由于异步编程能很好应对互联网高峰值高低谷的请求,所以Netty封装了NIO变成一个Web服务器框架供大家使用,但是Netty很难用需要对框架有很多理解才能写出没有Bug的代码,一旦出现Bug也很难解决。Netty无法应对数据库查询的时候JDBC本身就是同步这一状况——于是引出了Spring Reactive stack从底层到顶层全都是异步

四、Spring Reactive stack

也得益于Reactor Netty的出现协助底层通讯

4.1)Reactor Netty

Reactive出现后,Netty改动一下出现Reactor Netty,随后Spring在此基础上开发了Spring Reactive
Netty向外暴露了Httpserver.handler()接口,Spring自己编写的Handler将Reactor Netty和Spring Reactive桥接起来

4.2)WebMVC vs WebFlux

4.3)Springboot 如何选用Reactive栈

4.4)Spring webflux 核心组件

注解方式

函数式编程请求路由

服务器主动推消息

WebHandler API

4.5)Webflux 相关配置

从上述类中可发现WebFlux核心组件的具体实现

4.6)请求链——描述了Spring如何和Reactive Netty桥接

经过一层层最终通过DispatcheHandler进行请求的分发之后调用我们写的业务接口
HttpServerHandler这个类属于Netty
Spring用来桥接Netty的类
此类封装了一些东西,相当于上文WebHandler API那张图
concatMap就是一个一个来,next是找到了就拿一个mapping出来
getHandler()
invokeHandler()

4.7)RouterFunctionBuilder

轻量级WebFlux,没有IOC也没有注解映射

4.8)HandlerMapping & ResultHandler

函数式结果处理

4.9)Reactive DB

使用了Reactive数据库就不能使用同步阻塞的JDBC

4.10)测试应对请求的线程数

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容