Java網(wǎng)絡(luò)編程設(shè)置請求超時(shí)

一揭糕、引言

隨著企業(yè)系統(tǒng)的發(fā)展钩蚊,應(yīng)用多采用分布式結(jié)構(gòu),嚴(yán)重依賴于網(wǎng)絡(luò)的穩(wěn)定性蚜厉。但由于網(wǎng)絡(luò)天生的不穩(wěn)定性长已,系統(tǒng)開發(fā)過程中需要考慮網(wǎng)絡(luò)不穩(wěn)定情況下如何保證應(yīng)用的魯棒性。 設(shè)置網(wǎng)絡(luò)超時(shí)是其中一種保證應(yīng)用健壯性的手段弯囊。 設(shè)置網(wǎng)絡(luò)超時(shí)設(shè)置后痰哨,請求在設(shè)定時(shí)間能未完成將被強(qiáng)制終止胶果,保證程序不出現(xiàn)無限制的線程阻塞情況匾嘱,有效的提高了應(yīng)用的可用性。

二早抠、未設(shè)置超時(shí)與設(shè)置超時(shí)情況對比

1. 網(wǎng)絡(luò)請求圖例:

網(wǎng)絡(luò)請求超時(shí)案例

2. 設(shè)置超時(shí)時(shí)間后霎烙,請求圖例:

網(wǎng)絡(luò)請求超時(shí)案例-設(shè)置超時(shí)

三、常見的網(wǎng)絡(luò)超時(shí)設(shè)置

1. httpclient超時(shí)設(shè)置(Spring bean)

  1. 配置

     <bean id="multiThreadedHttpConnectionManager"
       class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager">
       <property name="params">
         <bean
           class="org.apache.commons.httpclient.params.HttpConnectionManagerParams">
           <property name="maxTotalConnections" value="${maxTotalConnections:300}" />
           <property name="defaultMaxConnectionsPerHost" value="${defaultMaxConnectionsPerHost:300}" />
           <!-- 連接超時(shí),毫秒悬垃。 -->
           <property name="connectionTimeout" value="${connectTimeout:10000}" />
           <!-- socket超時(shí)游昼,毫秒。 -->
           <property name="soTimeout" value="${readTimeout:600000}" />
           <property name="staleCheckingEnabled" value="${staleCheckingEnabled:true}" />
         </bean>
       </property>
     </bean>
     
     <bean id="httpClient" class="org.apache.commons.httpclient.HttpClient">
       <constructor-arg>
         <ref bean="multiThreadedHttpConnectionManager" />
       </constructor-arg>
     </bean>
    
  2. httpinvoker使用場景

配置HttpInvokerRequestExecutor尝蠕,覆蓋HttpInvokerProxyFactoryBean中默認(rèn)使用的的SimpleHttpInvokerRequestExecutor烘豌,并配置網(wǎng)絡(luò)超時(shí)。見《配置》看彼。

    <bean id="httpInvokerRequestExecutor"
      class="org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor">
      <constructor-arg>
        <ref bean="httpClient" />
      </constructor-arg>
    </bean>
    
    <bean id="xxxxService"
      class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
      <property name="serviceUrl" value="${xxxxServiceUrl}" />
      <property name="serviceInterface" value="com.xxxxService" />
      <property name="httpInvokerRequestExecutor" ref="httpInvokerRequestExecutor" />
    </bean>

2. HttpClient超時(shí)設(shè)置(硬編碼)

  1. 樣例

     RequestConfig config = RequestConfig.custom()
         .setSocketTimeout(1*1000)  // socket套接字超時(shí)廊佩,毫秒。
         .setConnectionRequestTimeout(1*1000) //使用連接池來管理連接時(shí)靖榕,從連接池獲取連接的超時(shí)時(shí)間标锄,毫秒。
         .setConnectTimeout(5*1000) // 連接建立超時(shí)茁计,毫秒料皇。
         .build();
     CloseableHttpClient httpClient = HttpClients.custom()
         .setDefaultRequestConfig(config) //
         .build();
     CloseableHttpResponse httpResponse = httpClient.execute(httpGet); // 執(zhí)行請求
    

3. 郵件超時(shí)設(shè)置

基于Spring框架開發(fā)的項(xiàng)目可以很方便的使用
org.springframework.mail.javamail.JavaMailSenderImpl實(shí)現(xiàn)郵件提醒等功能。

  1. 配置

     <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"
       p:host="${mailSender.host}" p:username="${mailSender.username}"
       p:password="${mailSender.password}">
       <property name="javaMailProperties">
         <props>
           <prop key="mail.smtp.auth">${mailSender.smtp.auth:true}
           </prop>
           <prop key="mail.smtp.timeout">${mailSender.smtp.timeout:10000}
           </prop>
           <prop key="mail.smtp.connectiontimeout">${mailSender.smtp.connectiontimeout:10000}
           </prop>
         </props>
       </property>
     </bean>
    
  2. javaMailProperties說明

    1. mail.smtp.timeout : smtp郵件服務(wù)器讀取超時(shí)星压。
    2. mail.smtp.connectiontimeout : smtp郵件服務(wù)器連接超時(shí)践剂。
    3. mail.smtp.auth : 是否認(rèn)證用戶。

    注: property參數(shù)名列表可查詢JavaMail API documentation娜膘。

  3. 參考

    1. JavaMail API documentation
    2. JavaMail Reference Implementation
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舷手,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子劲绪,更是在濱河造成了極大的恐慌男窟,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贾富,死亡現(xiàn)場離奇詭異歉眷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)颤枪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門汗捡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人畏纲,你說我怎么就攤上這事扇住。” “怎么了盗胀?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵艘蹋,是天一觀的道長。 經(jīng)常有香客問我票灰,道長女阀,這世上最難降的妖魔是什么宅荤? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮浸策,結(jié)果婚禮上冯键,老公的妹妹穿的比我還像新娘。我一直安慰自己庸汗,他們只是感情好惫确,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蚯舱,像睡著了一般雕薪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晓淀,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天所袁,我揣著相機(jī)與錄音,去河邊找鬼凶掰。 笑死燥爷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的懦窘。 我是一名探鬼主播前翎,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼畅涂!你這毒婦竟也來了港华?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對情侶失蹤午衰,失蹤者是張志新(化名)和其女友劉穎立宜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體臊岸,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡橙数,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了帅戒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灯帮。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖逻住,靈堂內(nèi)的尸體忽然破棺而出钟哥,到底是詐尸還是另有隱情,我是刑警寧澤瞎访,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布腻贰,位于F島的核電站,受9級(jí)特大地震影響装诡,放射性物質(zhì)發(fā)生泄漏银受。R本人自食惡果不足惜践盼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一鸦采、第九天 我趴在偏房一處隱蔽的房頂上張望宾巍。 院中可真熱鬧,春花似錦渔伯、人聲如沸顶霞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽选浑。三九已至,卻和暖如春玄叠,著一層夾襖步出監(jiān)牢的瞬間古徒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工读恃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留隧膘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓寺惫,卻偏偏與公主長得像疹吃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子西雀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理萨驶,服務(wù)發(fā)現(xiàn),斷路器艇肴,智...
    卡卡羅2017閱讀 134,629評(píng)論 18 139
  • 本文包括:1腔呜、名詞解釋2、郵件收發(fā)過程3再悼、JavaMail 知識(shí)概要4育谬、發(fā)送一封符合 MIME 協(xié)議的 JavaM...
    廖少少閱讀 3,997評(píng)論 2 13
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,773評(píng)論 6 342
  • HttpClient整理資料 1、httpClient HttpClient是Apache中的一個(gè)開源的項(xiàng)目帮哈。它實(shí)...
    小白豆豆5閱讀 29,842評(píng)論 5 38
  • application的配置屬性膛檀。 這些屬性是否生效取決于對應(yīng)的組件是否聲明為Spring應(yīng)用程序上下文里的Bea...
    新簽名閱讀 5,358評(píng)論 1 27