異常
reactor.netty.http.client.PrematureCloseException: Connection prematurely closed BEFORE response
解決方案
第1步、加入JVM參數(shù) -Dreactor.netty.pool.leasingStrategy=lifo
第2步冻押、SCG新增配置:
spring:
cloud:
gateway:
httpclient:
pool:
maxIdleTime: 100 (調(diào)大了有可能還會出現(xiàn)此問題)
第1步將默認(rèn)獲取連接由FIFO變更為LIFO,因?yàn)長IFO能夠確保獲取的連接最大概率是最近剛被用過的滔驾,LRU的思想错森。
第2步是設(shè)置空閑請求在空閑多久后會被回收,這樣也就可以避免拿到舊連接剛好在請求途中被強(qiáng)行close了愕把,這個時間的設(shè)置只要確保比你后端服務(wù)的connectTimeout小就行了拣凹,這樣能夠確保SCG回收請求在后端服務(wù)回收請求之前,就可以避免掉這個問題
以上的配置請下面的版本當(dāng)中使用:
Spring Cloud:Hoxton.SR1及以上(SCG 2.2.1.RELEASE及以上)
Reactor-Netty:v0.9.5.RELEASE及以上
Spring Boot:2.2.2.RELEASE及以上