com.amazonaws.SdkClientException: 無法執行HTTP請求。等待for池連接的超時。
com.amazonaws.SdkClientException: 無法執行HTTP請求。超時等待for池中的連接
原因是:org.apache.http.conn.ConnectionPoolTimeoutException。超時等待for池中的連接
因此,作為解決這個問題的方法,我使用了下面的方法,它目前是有效的。
@Bean
public AmazonS3 s3Client(){
return AmazonS3ClientBuilder
.standard()
.withClientConfiguration(new ClientConfiguration()
.withMaxConnections(100)
.withConnectionTimeout(100)
.withMaxErrorRetry(5))
.build()。
}
public String uploadFile() {
//上傳代碼。
}
我已經將其創建為一個Spring Bean。但我是在多執行緒環境下使用的。所以在同一時間會有很多并發的請求。我看到AmazonS3ClientBuilder被注解為@NotThreadSafe。所以我需要知道在多執行緒中使用這個Bean是否可以,否則我應該在同一個uploadFile方法中使用上述代碼塊?誰能告訴我最好的方法?謝謝你
uj5u.com熱心網友回復:
你沒有分享上傳程式的實際代碼,但我認為你的問題就在于此。所以,為了回答你的問題:
關于@NotThreadSafe,你不應該擔心這個問題。你使用構建器的目的是創建一個AmazonS3客戶端的實體。這個程序是在Spring初始化程序中完成的,這又意味著整個程序是由單執行緒處理的,因此不會受到潛在同步問題的影響。請注意,前面提到的是關于AmazonS3ClientBuilder的問題。創建的AmazonS3Client物件(通過呼叫AmazonS3ClientBuilder#build創建)被標記為執行緒安全,你可以在相關的source中看到。
關于您所遇到的問題。不幸的是,如果不分享上傳物件的邏輯,就沒有具體的方法來了解其確切的原因。然而,我認為你的問題源于這樣一個事實:你正在創建的并發上傳請求的數量高于配置的最大連接數。這反過來又會導致這些請求阻塞,等待從http池中檢索出一個連接。如果不能及時檢索到一個連接,那么請求就會超時(你正在經歷的情況)。欲了解更多資訊,您可以查看相關問題此處,其中概述了您所獲得的相同行為,盡管是針對下載操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/319188.html
標籤:
