我正在使用wsdl2java生成的Axis 2(1.6.1)java客戶端。無法發送ViaPost - 在Axis2客戶端存根上
這似乎是工作正常,但不時我得到以下錯誤:
14:38:04855 INFO [HTTPSender]無法sendViaPost到網址[...]
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293)
at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:331)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:798)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:755)
at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78)
at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106)
我想知道這是否可能是一個多線程問題,並想就此問題獲得一些答案。 我使用緩存HttpClient的存根。 HttpClient使用MultiThreadedHttpConnectionManager,我將setDefaultMaxConnectionsPerHost設置爲20.
我知道HttpClient憑藉關聯的MultiThreadedHttpConnectionManager將是線程安全的。 問題是Axis2存根會發生什麼?存根是否也是線程安全的?
我看過一些帖子,說明Axis存根並非線程安全設計。 如果是這樣的話,使用多線程HttpClient有什麼好處? 如何確保Axis客戶端存根在多線程環境中可用?
謝謝
謝謝你的回覆。如果這對客戶不是一個問題,我想這會讓我有些放心。 –
假設存根不是線程安全的,我真的有三個選擇:1.每次發出請求時創建/銷燬存根2.使用ThreadLocal存根或3.同步對共享實例(或實例池)的訪問的存根。 ThreadLocal選項對CPU的影響最小,但可能會在具有大型線程池的服務器上顯着增加內存佔用量。另外兩個可以將內存佔用降到最低,但是會需要更多(?)更多的CPU。根據你的經驗,你會推薦一種方法嗎?謝謝 –