摘要:在編程中有時(shí)候我們需要對(duì)做一些特定業(yè)務(wù)邏輯。諸如的絕大部分都依賴于和都是推送數(shù)據(jù)詳情請(qǐng)看,如果本身無(wú)數(shù)據(jù)可推送,那么就不會(huì)觸發(fā)。換句話說(shuō)內(nèi)部是不可能得到的。那么怎么做才可以你可以使用的來(lái)作為中間值除了之外,還提供了來(lái)處理。
在Reactor編程中有時(shí)候我們需要對(duì)empty Mono
public void oldCheck(Token token) { if (token == null) { // business logic return; } if (token.isExpired) { // business logic return; } // business logic return; }
如果讓你改成reactor你也許會(huì)改成這樣:
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(); }); }
上面的示例代碼里的注釋已經(jīng)寫了if (token == null) {}的這個(gè)條件是永遠(yuǎn)成立的,這是因?yàn)楫?dāng)Mono
那么怎么做才可以?你可以使用Java 8的Optional來(lái)作為中間值:
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來(lái)處理empty Mono/Flux。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74186.html
摘要:添加相關(guān)依賴之后,會(huì)有這個(gè)。接著,根據(jù)的源碼分析,會(huì)繼續(xù)鏈路,到達(dá)下一個(gè),即。在中,我們會(huì)計(jì)算出路由并發(fā)送請(qǐng)求到符合條件的。這個(gè)是的,會(huì)讀取配置并生成路由。本系列代碼地址:https://github.com/JoJoTec/spring-cloud-parent我們繼續(xù)分析上一節(jié)提到的 WebHandler。加入 Spring Cloud Sleuth 以及 Prometheus 相關(guān)依賴...
摘要:升級(jí)之路版基本流程講解抽象類本系列代碼地址我們繼續(xù)分析上一節(jié)提到的。添加相關(guān)依賴之后,會(huì)有這個(gè)。路由權(quán)重相關(guān)配置功能相關(guān)實(shí)現(xiàn)類,這個(gè)我們這里不關(guān)心。這個(gè)是的,會(huì)讀取配置并生成路由。 本系列代碼地址:??https://github.com/JoJoTec/spring-cloud-parent??我們繼續(xù)分析上一節(jié)提到的 ...
摘要:公司要做自己的網(wǎng)關(guān),于是先把的過(guò)了一遍,然后把源碼在看了一遍,這樣公司的需求就搞定了。包括動(dòng)態(tài)路由,多緯度限流,記錄請(qǐng)求參數(shù)及返回參數(shù)也可修改。至此,流程就走完了。 公司要做自己的網(wǎng)關(guān),于是先把github的issue過(guò)了一遍,然后把gateway源碼在看了一遍,這樣公司的需求就搞定了。包括動(dòng)態(tài)路由,多緯度限流,記錄請(qǐng)求參數(shù)及返回參數(shù)(也可修改)。先從請(qǐng)求進(jìn)入網(wǎng)關(guān)說(shuō)起吧: 請(qǐng)求先進(jìn)...
摘要:默認(rèn)配置所謂默認(rèn)配置就是對(duì)不做任何配置讓它的自動(dòng)配置起作用目的是對(duì)的默認(rèn)行為有一個(gè)初步的直觀的了解第一步使用的創(chuàng)建項(xiàng)目項(xiàng)目創(chuàng)建完成會(huì)自動(dòng)生成一個(gè)應(yīng)用入口類第二步創(chuàng)建一個(gè)控制器啟動(dòng)會(huì)在控制臺(tái)輸出中看到一個(gè)水機(jī)生成的格式的密碼最后打開(kāi)即可顯示 默認(rèn)配置 所謂默認(rèn)配置, 就是對(duì)Spring Security不做任何配置. 讓它的自動(dòng)配置起作用. 目的是對(duì)Spring Security 的默認(rèn)...
摘要:的這幾天看了看的請(qǐng)求處理流程,因?yàn)橹耙恢庇玫暮?,一開(kāi)始對(duì)的處理流程有點(diǎn)懵逼,找不到入口,后來(lái)跟了代碼,在網(wǎng)上找了點(diǎn)資料,發(fā)現(xiàn)的入口在的方法該方法的作用就是把接收到的或者最終需要返回的,包裝轉(zhuǎn)換為和。 spring-cloud-gateway 的ReactorHttpHandlerAdapter 這幾天看了看spring-cloud-gateway的請(qǐng)求處理流程,因?yàn)橹耙恢庇玫膕pr...
閱讀 1059·2021-10-11 10:59
閱讀 3610·2021-09-26 09:55
閱讀 906·2019-08-30 15:55
閱讀 2659·2019-08-30 15:44
閱讀 443·2019-08-30 14:06
閱讀 689·2019-08-30 11:26
閱讀 3349·2019-08-30 10:49
閱讀 2499·2019-08-29 12:53