摘要:在编程中有时候我们需要对做一些特定业务逻辑。诸如的绝大部分都依赖于和都是推送数据详情请看,如果本身无数据可推送,那么就不会触发。换句话说内部是不可能得到的。那么怎么做才可以你可以使用的来作为中间值除了之外,还提供了来处理。
在Reactor编程中有时候我们需要对empty Mono
public void oldCheck(Token token) { if (token == null) { // business logic return; } if (token.isExpired) { // business logic return; } // business logic return; }
如果让你改成reactor你也许会改成这样:
public MonobadCheck(Mono tokenMono) { return tokenMono .flatMap(token -> { if (token == null) { // CAUTION: You will never be in here // business logic return Mono.empty(); } if (token.isExpired) { // business logic return Mono.empty(); } // business logic return Mono.empty(); }); }
上面的示例代码里的注释已经写了if (token == null) {}的这个条件是永远成立的,这是因为当Mono
那么怎么做才可以?你可以使用Java 8的Optional来作为中间值:
public MonogoodCheck(Mono tokenMono) { return tokenMono // Transform Mono to Mono >. // If Mono is empty, flatMap will not be triggered, // then we will get a empty Mono > .flatMap(token -> Mono.just(Optional.of(token))) // If Mono > is empty, provide an empty Optional , // then we will get a non-empty Mono > anyway .defaultIfEmpty(Optional.empty()) // Since Mono > is not empty, flatMap will always be triggered. .flatMap(tokenOptional -> { if (!tokenOptional.isPresent()) { // business logic return Mono.empty(); } Token token = tokenOptional.get(); if (token.isExpired) { // business logic return Mono.empty(); } // business logic return Mono.empty(); }); }
除了defaultIfEmpty之外,Reactor还提供了switchIfEmpty、repeatWhenEmpty来处理empty Mono/Flux。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/74186.html
摘要:添加相关依赖之后,会有这个。接着,根据的源码分析,会继续链路,到达下一个,即。在中,我们会计算出路由并发送请求到符合条件的。这个是的,会读取配置并生成路由。本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent我们继续分析上一节提到的 WebHandler。加入 Spring Cloud Sleuth 以及 Prometheus 相关依赖...
摘要:升级之路版基本流程讲解抽象类本系列代码地址我们继续分析上一节提到的。添加相关依赖之后,会有这个。路由权重相关配置功能相关实现类,这个我们这里不关心。这个是的,会读取配置并生成路由。 本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent我们继续分析上一节提到的 ...
摘要:公司要做自己的网关,于是先把的过了一遍,然后把源码在看了一遍,这样公司的需求就搞定了。包括动态路由,多纬度限流,记录请求参数及返回参数也可修改。至此,流程就走完了。 公司要做自己的网关,于是先把github的issue过了一遍,然后把gateway源码在看了一遍,这样公司的需求就搞定了。包括动态路由,多纬度限流,记录请求参数及返回参数(也可修改)。先从请求进入网关说起吧: 请求先进...
摘要:默认配置所谓默认配置就是对不做任何配置让它的自动配置起作用目的是对的默认行为有一个初步的直观的了解第一步使用的创建项目项目创建完成会自动生成一个应用入口类第二步创建一个控制器启动会在控制台输出中看到一个水机生成的格式的密码最后打开即可显示 默认配置 所谓默认配置, 就是对Spring Security不做任何配置. 让它的自动配置起作用. 目的是对Spring Security 的默认...
摘要:的这几天看了看的请求处理流程,因为之前一直用的和,一开始对的处理流程有点懵逼,找不到入口,后来跟了代码,在网上找了点资料,发现的入口在的方法该方法的作用就是把接收到的或者最终需要返回的,包装转换为和。 spring-cloud-gateway 的ReactorHttpHandlerAdapter 这几天看了看spring-cloud-gateway的请求处理流程,因为之前一直用的spr...
阅读 1024·2021-10-11 10:59
阅读 3587·2021-09-26 09:55
阅读 880·2019-08-30 15:55
阅读 2629·2019-08-30 15:44
阅读 399·2019-08-30 14:06
阅读 666·2019-08-30 11:26
阅读 3307·2019-08-30 10:49
阅读 2414·2019-08-29 12:53