webflux-1-概念的理解

公司最近新项目选用了webFlux作为基础架构,也在缓慢的学习中。只因奈何相关API文档太少了,新版本的资料那就更少了,国内很多教程都是老版本的,只能是摸着石头过河。本系列的东西只是我个人鉴于文章之日的理解,肯定有不对的地方,如果您发现了,劳烦辛苦回复指出,先感谢。

程序员的危机

1.webflux完全拉低了程序员菜鸟和老鸟的差距,只要你用webflux写代码写出来的代码在性能上不会再有天壤之别了。目这是对传统程序员的一种冲击,工作年限可能真不是问题了。函数式流编程是未来!

2.传统应用架构师常用 切面 ,反射 在这里不好使了,很多花样都没法玩,该职位未来会向着 云生架构师的方向进化,让其在更宏观的眼界来工作,从大厂最近的招聘上也能看出有这个趋势了

3.在语法上,在使用flatmap这些流式api时 默认会使用final修饰变量,基本变量的操作强制会让你使用juc包下的atomic类型的,从编码层面就限制你使用锁机制,也就消除了死锁的问题

4.传统编码中的内存泄漏一直是个容易出现但是却很难定位得问题,并且内存泄漏一定是代码问题,webflux设计上则规避了这些问题。它不需要你明确得new对象了。前提只要你规范使用它的api。

5.线程是java服务器的稀缺资源,所以就要使用线程池配合限流保证服务可用,线程池合理的参数配置是很有学问的,使用webflux不用在考虑 限流,线程池这些,webflux帮你搞定,

Wenflux存在的问题

1.自动生成api文档页面,这个问题紧在route方式,spring自己提供了一个解决方案就是每个接口必须写测试用例,但是不是很优雅,目前还不知道有什么方式可以像使用swagger那样编辑,也可能是我还没接触到吧

2.因为反射和aop的问题,多数据源的问题还没有找到像传统项目中那种优雅的方式,后面的文章会放上找到的方式

3.流式编程代码的调试变得复杂,我们不能一行一行的调试了,开发中把日志加全一些吧

webflux 是什么?

Spring 5新加入的响应式流编程技术栈是其主打核心特性,最低Springbooot2.0,底层使用Netty,这个从搭建好项目启动日志中能看出来。

webflux的三个组件

1.Router Functions: 对标@Controller,@RequestMapping等标准的Spring MVC注解,提供一套函数式风格的API,用于创建Router,Handler和Filter。

2.WebFlux: 核心组件,协调上下游各个组件提供响应式编程支持。

3.Reactive Streams: 一种支持背压(Backpressure)的异步数据流处理标准,主流实现有RxJava和Reactor,Spring WebFlux默认集成的是Reactor,

值得一提的是,除了新的Router Functions接口,Spring WebFlux同时支持使用老的Spring MVC注解声明Reactive Controller。和传统的MVC Controller不同,Reactive Controller操作的是非阻塞的ServerHttpRequest和ServerHttpResponse,而不再是Spring MVC里的HttpServletRequest和HttpServletResponse

在路由方式的选择上 建议使用webflux的router风格,它比Reactive Controller的方式更符合函数编程的思想,在请求的链路上比Controller更快一些

下面的内容,入学者多体会

流编程是jdk1.8的新特性,webflux是在其基础思想上更高层的应用,StreamAPI网上学学吧,教程太多了,这里用生活中的例子帮你理解,先理解思想

1.在webflux的世界中 一切都是流,一个请求过来到返回是一个完整的流,中间是不能断的,执行了中断指令是就违背了webflux设计的本意

2.已南水北调为例,从南到北是一条线,国家已经从地图上画好了线,从哪到哪都明确标注了,施工时中间经过的各个地区每隔一段修建一个蓄水池(webflux中就是我们具体的业务处理了),逐级接力把水送到北方,但是这条线是不能改的,在webflux的设计中也是这样,千万千万不要让流中断

3. 国家在有南水北调这个想法时想把它实现,想象一下如果你是领导是不是 先设定方案、实地考察中途经过的地区、确定方案路线、组织各级政府做准备,为了能尽快实现目标最后国家一声令下各级政府开始同时施工,webflux也是这个思想。最后国家(spring)的命令就是webflux订阅(真正的开始执行),在命令没有下达之前 各级只是根据自己负责区域实际情况做准备并没有实际开工(可以想象是占位,webflux中 惰性求值),各级完成了自己的任务时,就报告给国家说我完成了(发射信号量),当所有各级政府都完成了,国家就发布公告说 南水北调已经完成请验收(spring数据汇总返回)。那么各级政府修建的河道成不成呢,那就让水在挨个地区修建的河道流动起来(对应webflux里每个下级需要上级返回的数据流),如果说中间有个地区放下了水闸,对不起你这是在抗命啊,水在到达目的地之前是不能被拦截在一个地方的(流是不能中断的),

总结一下一个请求进来到出去,中间不能执行(subscribe(),block())中断操作,理论上最后的订阅要交给Spring来帮我们订阅,也就是 请求从进来到返回,中间是不真正执行的,只有当Spring执行了订阅subscribe()以后才真正的开始执行

4.在入门写代码时 如果发现有方法没执行,找找代码中是不是没有吧流一级一级的返回

5.如果说 一个方法你有10步操作,你想在第4步骤执行subscribe,对不起 剩下的9个你也都加上吧,还是那句话  流是不能被中断的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,978评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,954评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,623评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,324评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,390评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,741评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,892评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,655评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,104评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,569评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,254评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,834评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,725评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,950评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,260评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,446评论 2 348

推荐阅读更多精彩内容