我想為一個多執行緒專案創建一個 Jersey 客戶端。我需要為客戶端創建一個連接池嗎?
服務器上有 500 TPS 流量。如何計算以下引數以獲得最佳性能。
ConnectionTimout、SocketTimeout、ReadTimeout、MaxConnectionPerHost、MaxConnections。
什么是重置連接池的概念以及何時使用它?
uj5u.com熱心網友回復:
Jersey Client 對于多個請求執行是執行緒安全的。檔案
創建 WebResource 實體的方法是執行緒安全的。修改配置和/或過濾器的方法不能保證是執行緒安全的。
Client 實體的創建是一項昂貴的操作,并且該實體可能會使用并保留許多資源。因此,建議重用 Client 實體來創建需要相同配置設定的 WebResource 實體。
建議Client
對多個請求執行重用同一個類實體。更改Client
配置不是執行緒保存,必須適當處理。
我需要為客戶端創建一個連接池嗎?
簡短的回答是的。
默認情況下,澤西客戶端使用BasicHttpClientConnectionManager
. 檔案
它是一個簡單的連接管理器,一次只維護一個連接。即使這個類是執行緒安全的,它也應該只被一個執行執行緒使用。BasicHttpClientConnectionManager 將努力為具有相同路由的后續請求重用連接。但是,如果持久連接的路由與連接請求的路由不匹配,它將關閉現有連接并為給定路由重新打開它。如果已分配連接,則拋出 java.lang.IllegalStateException。
對于多執行緒應用程式,您需要使用 覆寫默認值PoolingHttpClientConnectionManager
。
它是一種更復雜的實作,它管理客戶端連接池并能夠為來自多個執行執行緒的連接請求提供服務。連接按每條路由匯集。管理器已經在池中具有可用的持久連接的路由請求將通過從池中租用連接而不是創建全新的連接來提供服務。
PoolingHttpClientConnectionManager 維護每個路由的最大連接限制和總數。默認情況下,此實作將為每個給定路由創建不超過 2 個并發連接,并且總共不超過 20 個連接。對于許多現實世界的應用程式來說,這些限制可能過于局限,尤其是當他們使用 HTTP 作為其服務的傳輸協議時。
有關詳細資訊Apache 連接管理
配置
一般建議是避免無限超時,這是 Jersey 默認設定的。如果出現問題,它可能會產生執行緒卡住。請參閱Web 服務超時的最佳實踐選擇正確的值。沒有具體的值,應該根據服務和環境性能來設定。正確的超時和連接大小將在性能測驗或實時使用之后出現。
只需靈活地實施它,添加動態調整設定的能力。
讀取超時
讀取超時間隔屬性,以毫秒為單位。該值必須是整數的實體。如果該屬性不存在,則默認值為無窮大區間。零值 0 等價于無窮大的區間
You can set 1 minute like the initial value. Also, you can override timeout per request in case of exceptional cases.
Connection Timeout
Connect timeout interval property, in milliseconds. The value MUST be an instance of Integer. If the property is absent then the default value is an interval of infinity. A value of 0 is equivalent to an interval of infinity
Set 500 - 1000 milliseconds like the initial value.
MaxConnectionPerHost
Set 20 connections like initial value.
MaxConnections
Set 200 connections like initial value.
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/451737.html