成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

處理Empty Mono的方法

qpwoeiru96 / 1334人閱讀

摘要:在編程中有時(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做一些特定業(yè)務(wù)邏輯。下面看一段非reactor編程的代碼:

public void oldCheck(Token token) {
  if (token == null) {
    // business logic
    return;
  }
  if (token.isExpired) {
    // business logic
    return;
  }
  // business logic
  return;
}

如果讓你改成reactor你也許會(huì)改成這樣:

public Mono badCheck(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是empty時(shí),它是不會(huì)觸發(fā)flatMap的。諸如flatMap的絕大部分Operator都依賴于PublisherMonoFlux都是Pubisher)推送數(shù)據(jù)(詳情請(qǐng)看javadoc),如果Publisher本身無(wú)數(shù)據(jù)可推送,那么就不會(huì)觸發(fā)Operator。換句話說(shuō)flatMap內(nèi)部是不可能得到null的。

那么怎么做才可以?你可以使用Java 8的Optional來(lái)作為中間值:

public Mono goodCheck(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)文章

  • SpringCloud升級(jí)之路2020.0.x版-41. SpringCloudGateway 基本

    摘要:添加相關(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)依賴...

    不知名網(wǎng)友 評(píng)論0 收藏0
  • SpringCloud升級(jí)之路2020.0.x版-41. SpringCloudGateway 基本

    摘要:升級(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é)提到的 ...

    番茄西紅柿 評(píng)論0 收藏2637
  • spring cloud gateway 源碼解析(1)整體流程

    摘要:公司要做自己的網(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)...

    miqt 評(píng)論0 收藏0
  • Spring Security: Webflux 默認(rè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)...

    luoyibu 評(píng)論0 收藏0
  • springboot(六)——springboot與webflux結(jié)合初探

    摘要:的這幾天看了看的請(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...

    hersion 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<