Gateway reactor.netty.http.client.PrematureCloseException: Connection prematurely closed BEFORE r...

异常

reactor.netty.http.client.PrematureCloseException: Connection prematurely closed BEFORE response

解决方案

第1步、加入JVM参数 -Dreactor.netty.pool.leasingStrategy=lifo

第2步、SCG新增配置:
spring:
  cloud:
    gateway:
      httpclient:
        pool:
          maxIdleTime: 100 (调大了有可能还会出现此问题)

第1步将默认获取连接由FIFO变更为LIFO,因为LIFO能够确保获取的连接最大概率是最近刚被用过的,LRU的思想。

第2步是设置空闲请求在空闲多久后会被回收,这样也就可以避免拿到旧连接刚好在请求途中被强行close了,这个时间的设置只要确保比你后端服务的connectTimeout小就行了,这样能够确保SCG回收请求在后端服务回收请求之前,就可以避免掉这个问题

以上的配置请下面的版本当中使用:

Spring Cloud:Hoxton.SR1及以上(SCG 2.2.1.RELEASE及以上)
Reactor-Netty:v0.9.5.RELEASE及以上
Spring Boot:2.2.2.RELEASE及以上

你可能感兴趣的:(Gateway reactor.netty.http.client.PrematureCloseException: Connection prematurely closed BEFORE r...)