1. 程式人生 > >xfire設定連線超時問題

xfire設定連線超時問題

近期使用xfire作為客戶端訪問WS,結果因為目標主機假死,造成客戶端一致無法返回,後續呼叫也無法進行。更悲催的是採用定時器輪詢呼叫,結果整個定時器都阻塞無法執行後續任務。

跟蹤了一下程式碼發現引起上訴問題的程式碼出現在此處(紅色部分):

Java程式碼  收藏程式碼
  1. public Client loadClient() throws MalformedURLException, Exception{  
  2.         <span style="color: #ff0000;">Client client = new Client(new URL(url));</span>  
  3.         client.setTimeout(20000);  
  4.         HttpClientParams params = new HttpClientParams();  
  5.         // 避免'Expect: 100-continue' handshake
  6.         params.setParameter(HttpClientParams.USE_EXPECT_CONTINUE,Boolean.FALSE);  
  7.         //設定ws連線超時時間
  8.         params.setParameter(HttpClientParams.CONNECTION_MANAGER_TIMEOUT, 20000l);  
  9.         client.setProperty(CommonsHttpMessageSender.HTTP_CLIENT_PARAMS,params);  
  10.         return client;  
  11.     }   

 在第一步例項化client時就已經阻塞了,後面的設定超時之類的都是浮雲啊。

分析原因:

超時有很多種
1.連線超時,有以下情況
  IP不正確,伺服器掛掉了,網路異常
2.讀取資料超時

在此處引起問題應該是伺服器掛掉了,最終原因是因為使用 xfire/HttpMethod 造成Socket連線池滿。最終在網上找到了解決方案:

Java程式碼  收藏程式碼
  1. URL _url = new URL(url);  
  2.         HttpURLConnection httpConnection = (HttpURLConnection)_url.openConnection();  
  3.         httpConnection.setReadTimeout(20000);//設定http連線的讀超時,單位是毫秒
  4.         httpConnection.connect();  
  5.         Client _client = new Client(httpConnection.getInputStream(), null);  
  6.         _client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, String.valueOf( 20000 ));//設定傳送的超時限制,單位是毫秒;
  7.         _client.setProperty(CommonsHttpMessageSender.DISABLE_KEEP_ALIVE, "true");  
  8.         _client.setProperty(CommonsHttpMessageSender.DISABLE_EXPECT_CONTINUE, "true");  

相關推薦

xfire設定連線超時問題

近期使用xfire作為客戶端訪問WS,結果因為目標主機假死,造成客戶端一致無法返回,後續呼叫也無法進行。更悲催的是採用定時器輪詢呼叫,結果整個定時器都阻塞無法執行後續任務。 跟蹤了一下程式碼發現引起上訴問題的程式碼出現在此處(紅色部分): Java程式碼   public Clien

Retrofit2.0 設定 連線超時

Retrofit2.0 這個網路請求框架使用了很久了,最近一次出現一個小插曲。 有一個介面,返回的資料量因為業務的原因 會返回很大的資料量,此時網路不大好的情況下,會出現請求失敗的情況 也就是回調了 onFaileure()方法,測試一下,大概都在10秒就會回撥這個方法。 去後臺驗證,發現數據請求成功,

使用uWSGI和nginx如何設定連線超時時間

轉載自:https://www.jianshu.com/p/f5ee6b6b7e54   前段時間做一個django的專案,因為之前專案只是一個後臺程式,因此資料庫設計的並不滿足後面新新增的前端的需求,所以查詢顯示什麼的特別冗餘,造成了大量的坑。今天就分享一個爬坑的過程。

httpclient4.5以上設定連線超時的…

public static JSONObject httpGet(String url, Map getrequesttMap, boolean noNeedResponse) {//post請求返回結果CloseableHttpClient httpClient = HttpClients.cre

Socket中如何設定連線超時(轉)

(antghazi發表於2003-3-16 9:28:38)   connect的超時很簡單,CSDN上也有人提到過使用select,但卻沒有一個令人滿意與完整的答案。偶所講的也正是select函式,此函式整合在winsock1.1中,簡單點講,"作用使那些想避免在套接字呼

linux socket 設定連線超時的方法

1.alarm方法http://hi.baidu.com/ppln/blog/item/0523d3090731689d0a7b8200.html#include<stdio.h>#include<unistd.h>#include<strin

IIS設定連線超時

連線超時有助於減少由空閒連線消耗的處理資源損失。啟用連線超時時,IIS 會在連線級別執行以下型別的連線超時:客戶端已向伺服器傳送了資料,現處於空閒狀態造成的連線超時。 已建立了與伺服器的連線,但客戶端未傳送資料時造成的伺服器偵聽超時。響應超時(基於可配置的最小位元組數/秒的

Socket關於設定連線超時

做網路程式設計的人對setSoTimeout方法一定很熟悉,都知道是設定連線的超時時間! 但是我在網上找資料時發現很多人把這個超時時間理解成了鏈路的超時時間!我看了一下JDK 關於這個方法的說明,其實根本不是鏈路的超時時間! Java程式碼   setSoTimeo

HttpClient 4.5.2版本設定連線超時時間-CloseableHttpClient設定Timeout

HttpClient  4.5版本設定連線超時時間-CloseableHttpClient設定Timeout(區別於4.3.2) HttpClient升級到4.5版本後,API有很多變化,HttpClient 4之後,API一直沒有太穩定,我感覺4.5版本抽象後,很多

Socket中如何設定連線超時

把CSDN與中文yahoo翻了底朝天,也沒找到如何設定socket的連線超時的滿意方法,問此問題的兄弟已有一大堆,這裡偶就講一下win下如何設定socket的connect超時。設定connect的超時很簡單,CSDN上也有人提到過使用select,但卻沒有一個令人滿意與完整的答案。偶所講的也正是select

restlet 客戶端發起請求,連線超時設定

此客戶端建立 是使用restlet 實現。 需要restlet 的基礎jar包,org.restlet.jar,org.restlet.ext.servlet.jar. 這兩個jar 可以實現基本的rest服務。 客戶端發起請求還需要其他相關jar包。如下 * 需要依賴org.res

mysql連線超時wait_timeout設定

通過下面命令可以檢視mysql的超時時間 show global variables like 'wait_timeout'; 其預設值為8小時,超過這個時間,mysql會自動斷開該連線。 有兩種方法可以修改該值 1、命令修改 set global wait_timeout=2880

解決ssh連線超時時間(ssh timeout)的設定方法

  本文介紹下,linux中ssh連線超時時間的設定方法,以避免總是被強行退出。有需要的朋友,參考下吧。有關修改ssh連線超時時間的方法,網上介紹的很多了。比如下面這個:可以減少ssh連線超時等待的時間:方法:ssh -o ConnectTimeout=3 192.168

ftpClient的連線超時設定(setConnectTimeout,setSoTimeout)

                從 ftpClient的官方網的FAQ裡面看到,實現這個需要用一個 自定義的SocketFactory然後實現裡面的 createSocket方法,有好多個。http://wiki.apache.org/jakarta-commons/Net/FrequentlyAskedQu

[轉]c# winform tcp connect timeout 連線超時設定

轉自:https://www.cnblogs.com/jhlong/p/5622336.html 簡單的c# TCP通訊(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (非同步方式) C# 的tcp Socket設定自定義超時時間 C# TCP

修改 Tomcat 伺服器的埠號/設定 Tomcat 伺服器連線超時時間

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEnco

Socket 關於設定Socket連線超時時間

做網路程式設計的人對setSoTimeout方法一定很熟悉,都知道是設定連線的超時時間! 但是我在網上找資料時發現很多人把這個超時時間理解成了鏈路的超時時間!我看了一下JDK 關於這個方法的說明,其實根本不是鏈路的超時時間! Java程式碼   setSoTimeout   public vo

如何設定socket通訊的連線超時

在建立socket連線時可以很容易設定socket通訊的傳送和接收超時時間,但是在建立socket通訊時,如果是Win98系統,則如果連線失敗,則程式會一直等待在哪裡,Windows2000預設超時時間是30秒,當然,這個超時時間不算長,但是加入我們要迴圈掃描一系列埠並且建立

HttpClient代理IP及設定連線讀取超時

1、不廢話,上程式碼: public static void main(String[] args) throws Exception { CloseableHttpClient httpClient = HttpClients.createDefault(); /

jedis連線超時問題處理

public class TestPing { public static void main(String[] args) { Jedis jedis = new Jedis("192.168.201.128", 6379); System.out.println(jedis.ping()); }