restTemplate踩過的坑-spring clound--cloud內部服務呼叫重試次數
轉載自 https://www.cnblogs.com/jimw/p/9037542.html
現在公司專案基本都從臃腫的專案轉換成微服務的方向轉換,因此也從中使用了spring clound的一些元件,在此過程中就遇到了restTemplate的坑。
起初,是直接注入RestTemplate,後來則不斷的遇到錯誤日誌無法請求,出現異常。
異常資訊:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: No instances available for IP
意思是說url必須是服務的名稱,猜測應該是涉及到eureka,直接用ip跟url呼叫是直接報錯的。
因此不適用預設的,直接重新自定義,則引用了原有的注入修改一下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
RestTemplateConfig {
* 配置HttpClient超時時間
|
當配置了這個之後,服務正常了。觀察了一段時間,發現在併發的高峰期,開多幾個伺服器負載,也會存在服務出現請求非常慢,導致接口出現阻塞的情況出現,經過分析
1、出現阻塞的原因是因為高峰併發的時候,出現請求的連結數很大
因此找了原始碼,發現是因為restTemplate的預設配置值小於請求的連結數,而且路由併發也是預設為5的,因為微服務之間的邏輯處理中也有一定的時間。出現大規模阻塞的坑就這麼踩到了。
對程式碼改造一下,配置最大連結數,路由併發數,這個restTemplate的坑就這麼解決了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
|
在對應的外掛中配置即可
依賴包:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.9</version>
</dependency>