中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java網絡編程教程之設置請求超時的方法

發布時間:2020-10-11 10:43:51 來源:腳本之家 閱讀:144 作者:iamgeektao 欄目:編程語言

一、引言

隨著企業系統的發展,應用多采用分布式結構,嚴重依賴于網絡的穩定性。但由于網絡天生的不穩定性,系統開發過程中需要考慮網絡不穩定情況下如何保證應用的魯棒性。 設置網絡超時是其中一種保證應用健壯性的手段。 設置網絡超時設置后,請求在設定時間能未完成將被強制終止,保證程序不出現無限制的線程阻塞情況,有效的提高了應用的可用性。

下面話不多說了,來一起看看詳細的介紹吧。

二、未設置超時與設置超時情況對比

1. 網絡請求圖例:

Java網絡編程教程之設置請求超時的方法

網絡請求超時案例

2. 設置超時時間后,請求圖例:

Java網絡編程教程之設置請求超時的方法

網絡請求超時案例-設置超時

三、常見的網絡超時設置

1. httpclient超時設置(Spring bean)

配置

 <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}" />
  <!-- 連接超時,毫秒。 -->
  <property name="connectionTimeout" value="${connectTimeout:10000}" />
  <!-- socket超時,毫秒。 -->
  <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>

httpinvoker使用場景

配置HttpInvokerRequestExecutor,覆蓋HttpInvokerProxyFactoryBean中默認使用的的SimpleHttpInvokerRequestExecutor,并配置網絡超時。見《配置》。

 <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超時設置(硬編碼)

樣例

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

3. 郵件超時設置

基于Spring框架開發的項目可以很方便的使用
org.springframework.mail.javamail.JavaMailSenderImpl實現郵件提醒等功能。

配置

 <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>

javaMailProperties說明

  • mail.smtp.timeout : smtp郵件服務器讀取超時。
  • mail.smtp.connectiontimeout : smtp郵件服務器連接超時。
  • mail.smtp.auth : 是否認證用戶。

注: property參數名列表可查詢JavaMail API documentation。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

參考

  • JavaMail API documentation
  • JavaMail Reference Implementation
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

穆棱市| 山阴县| 巨鹿县| 民县| 永胜县| 汉源县| 武威市| 大关县| 临桂县| 二连浩特市| 循化| 德惠市| 肃北| 叙永县| 闽侯县| 米林县| 隆尧县| 上栗县| 兖州市| 锦屏县| 白河县| 泾源县| 新疆| 上饶市| 梅州市| 台山市| 监利县| 河池市| 腾冲县| 岳阳市| 舒兰市| 贡嘎县| 贵阳市| 祁阳县| 五河县| 任丘市| 策勒县| 广德县| 天柱县| 肇东市| 罗平县|