认识SpringReactor框架
我们都知道 reactor模式的优缺点, 也就是基于异步实现的, 但是这只是模式, 那么框架如何运作, 如何优美,则是另一回事。
最近在看 spring-cloud-gateway , 我被老外写的代码吸引了, 一路到底就是 reactor框架整合netty的那段代码。 确实很优美。 主要是 reactor-netty 那个包。 确实写得不赖, 写了tcp ,udp 客户端和服务器端, 用户可以基于这个实现很多基于这个传输层的框架实现。
废话不多说, 先入门个 reactor吧,它是spring开发的一个子项目,spring的代码水平相当之高,尤其是封装和架构设计这块, github地址是 https://github.com/reactor/reactor-core 需要掌握它的写法和思想。
其中一个例子的地址是 https://www.infoq.com/articles/reactor-by-example/ ,我基本就是看的这个, 对于我们开发者而言, 其实不需要关注订阅, 对于reactor模式, 他是基于observer模式, 一个观察者模式, 发布订阅模式吧 , 其中让大家不理解的是 ,Flux 和 Mono , 这俩概念, 其实他俩都是发布者, 而订阅者我们接触不到,是因为spring框架帮我们订阅了。 也就是这个思想。 他的实现是基于 RxJava 2思想的。
我们开始吧。 Reactor"s two main types are the Flux andMono . A Flux is the equivalent of an RxJavaObservable , capable of emitting 0 or more items, and then optionally either completing or erroring.
A Mono on the other hand can emit at most once. It corresponds to both Single andMaybe types on the RxJava side. Thus an asynchronous task that just wants to signal completion can use aMono .
This simple distinction between two types makes things easy to grasp while providing meaningful semantics in a reactive API: by just looking at the returned reactive type, one can know if a method is more of a "fire-and-forget" or "request-response" ( Mono ) kind of thing or is really dealing with multiple data items as a stream (Flux ).
Both Flux and Mono make use of this semantic by coercing to the relevant type when using some operators. For instance, calling single() on aFlux will return aMono , whereas concatenating two monos together usingconcatWith will produce aFlux . Similarly, some operators will make no sense on aMono (for exampletake(n) , which produces n > 1 results), whereas other operators will only make sense on aMono (e.g.or(otherMono) ).
上面这个就讲述了 Moon 和 Flux的区别, 其实就是 one / more 的区别. many one = more , 同时也可以分解.
快速开始前, 我们只需要加入 maven依赖 io.projectreactor reactor-core 3.1.8.RELEASE
简单例子 public class ReactorSnippets { private static List words = Arrays.asList( "the", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog" ); @Test public void simpleCreation() { Flux fewWords = Flux.just("Hello", "World"); Flux manyWords = Flux.fromIterable(words); // 第一个订阅者 fewWords.subscribe(System.out::println); System.out.println("==============); // 第二个 manyWords.subscribe(System.out::println); } }
上面输出 : Hello World the quick brown fox jumped over the lazy dog
焕新纪,创未来!AtomSTEM品牌升级为原子同学随着人工智能的快速发展,世界各国越来越重视对科技创新型人才的培养。近年来,教育部颁布的一系列政策明确指向应逐步开展全民智能教育,推广并设置人工智能相关课程。编程机器人课程教育的重要
轩逸发生事故后安全气囊未弹出,4S店没撞对位置,下次注意当下,随着汽车行业的加速发展,汽车安全备受大家关注。因此,汽车厂商在打造汽车产品的过程中,车辆上的安全配置也越来越先进以及全面。作为保命的安全配置之一,安全气囊的出场频率虽然远远比
不算评测的一加9PRO影像体验,手机旅拍短片视频加载中评测是门手艺,吐槽需要勇气,大家好,这里是超级测。我一个喜欢抓拍的黄昏收集者,短片中的所有画面都是我用一加9PRO手持拍摄的,没有经过任何调色后期。今天我想借此机会跟各位
旗捷支招打印文件不用愁,手机全搞定在互联网技术高度发达的今天,移动技术也在逐渐改变我们的生活。随着智能手机的普及,越来越多产品都离不开手机软件的支持。打印设备作为日常办公中必不可少的设备之一,也逐渐向用户推出手机打
旗捷支招如何识别惠普打印机的生产日期长时间以来,惠普打印机通过一系列悄无声息的后台操作对通用耗材进行打印机升级。例如WiFi推送,电脑驱动更新等。针对此类情况,旗捷也给大家提供如何关闭打印机固件升级的4种方式,可以通
抓住金九银十的尾巴,十月最后一周上市新车都有哪些看点来到了10月最后一周,虽然上市新车不多,但是每一款都可谓具有潜力的爆款。今年车市的金九银十预冷下,相信不少车企都希望在广州车展上发布自己的重磅车型,冲击第四季度销量。但在车展前夕上
编程教育不能停,选对平台是关键据中国网未来网报道,Scratch平台开放的海外社区论坛上有部分国外用户上传大量辱华造谣中国的内容,其中还充斥着一些宣传邪教借中美贸易摩擦抹黑中方的言论等。青少年学习平台应该严格规
旗捷支招如何关闭打印机固件自动更新?分分钟搞定一直以来,惠普通过不同的方式针对通用耗材进行打印机升级,其中,尤其是通过固件升级的方式,随时随地影响着使用通用耗材的用户。今年5月份以来,惠普已经连续多次进行了打印机固件升级,通过
试驾新款雅阁配置加量不加价,凯美瑞天籁只能争第二?在几个月前,打开广汽本田雅阁的车型页面,2018款这几个字分外扎眼。随后看到中期改款雅阁的申报图后,心中更是没有一丝波澜,心道就这?但当看到2021款雅阁实车之后,再次撩起了在20
如何查看兄弟彩色硒鼓产品耗材编码随着数字化办公的兴起,打印机在人们的工作与生活中扮演的角色越来越重要,目前市面上的主流办公打印机都属于激光打印,而硒鼓是激光打印里最重要的一个部件,打印质量的好坏很大程度都由硒鼓来
科创教育品牌阿童木创想家正式升级为原子同学AtomSTEM编程与机器人课程教育的重要性不言而喻,拥有专业科技特长的孩子将更具备升学竞争力。在实际普及率仍旧不高的国内,少儿编程机器人领域的教育市场仍旧是一片蓝海。在过去多年发展中,原子同学A