日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了根據(jù)錯誤狀態(tài)代碼關(guān)閉反應(yīng)堆網(wǎng)絡(luò)連接的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

為了將數(shù)據(jù)發(fā)送到遠程內(nèi)容交付網(wǎng)絡(luò),我通過Spring Webflow框架使用了Reator Netty。當客戶端請求完成時,默認的反應(yīng)程序Netty行為是保持連接活動并將其釋放回基礎(chǔ)連接池。

某些內(nèi)容交付網(wǎng)絡(luò)建議針對某些類型的狀態(tài)代碼(例如,500內(nèi)部服務(wù)器錯誤)重新解析DNS。為此,我添加了一個自定義NettyDnsNameResolverDnsCache,但我還需要關(guān)閉連接,否則它將被釋放回池,并且不會重新解析DNS。

如何在出現(xiàn)錯誤狀態(tài)代碼時關(guān)閉連接?

到目前為止,我已經(jīng)想出了以下解決方法,將ConnectionObserver添加到反應(yīng)器Netty的TcpClient

TcpClient tcpClient = TcpClient.create()
        .observe((connection, newState) -> {
            if (newState == State.RELEASED && connection instanceof HttpClientResponse) {
                HttpResponseStatus status = ((HttpClientResponse) connection).status();
                if (status.codeClass() != HttpStatusClass.SUCCESS) {
                    connection.dispose();
                }
            }
        });

即,如果連接已釋放(即放回連接池中),并且釋放是由狀態(tài)代碼為UNSUCCESS的HTTP客戶端響應(yīng)引起的,則關(guān)閉該連接。

這種方法感覺很笨拙。如果在錯誤狀態(tài)碼之后釋放連接,并且觀察器正在關(guān)閉該連接,則新請求是否可以并行獲取相同的連接?框架是否在內(nèi)部優(yōu)雅地處理事情,或者這是否是使上述方法無效的爭用條件?

提前感謝您的幫助!

推薦答案

最好使用doOnResponse或doAfterResponseSuccess,具體取決于哪個用例更合適。

不過,等待釋放應(yīng)該不是問題

如果在錯誤狀態(tài)碼之后釋放連接,而觀察者正在關(guān)閉該連接,則新請求是否可以并行獲取相同的連接?框架是否在內(nèi)部優(yōu)雅地處理事情,或者這是否是使上述方法無效的爭用條件?

連接池默認運行FIFO租賃策略,如果池中有空閑連接,則不會獲得相同的連接,如果將連接池切換為后進先出租賃策略,則不會獲得相同的連接。獲取時,會檢查每個連接是否處于活動狀態(tài),并且只提供活動的連接供使用。

更新

您也可以嘗試下面的方法,只使用WebClient API而不使用反應(yīng)器Netty API:

return this.webClient
           .get()
           .uri("/500")
           .retrieve()
           .onStatus(status -> status.equals(HttpStatus.INTERNAL_SERVER_ERROR), clientResponse -> {
                clientResponse.bodyToFlux(DataBuffer.class)
                              .subscribe(new BaseSubscriber<DataBuffer>() {
                                  @Override
                                  protected void hookOnSubscribe(Subscription subscription) {
                                      subscription.cancel();
                                  }
                              });
                return Mono.error(new IllegalStateException("..."));
           })
           .bodyToMono(String.class);

這篇關(guān)于根據(jù)錯誤狀態(tài)代碼關(guān)閉反應(yīng)堆網(wǎng)絡(luò)連接的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:代碼 關(guān)閉 反應(yīng)堆 狀態(tài) 網(wǎng)絡(luò) 連接 錯誤
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定