GateWay报错Connection prematurely closed BEFORE response问题(若依框架微服务版报错提示为内部服务器错误)

SCG的底层Reactor-Netty会为请求实例创建连接池,以便后面发起请求不用重新创建请求,直接从中获取即可。
默认情况下,SCG内部创建的连接是不会被回收的,一直存在于内存中,而Spring Boot内置的Tomcat不一样,默认在20s之后没有数据交互,便会回收掉这个连接,在回收的时候恰巧碰到又来了请求,刚好又在SCG拿到这个连接来尝试请求Tomcat,就会出现这个异常。

解决方式:
第1步、加入JVM启动参数:

-Dreactor.netty.pool.leasingStrategy=lifo

第2步、SCG新增配置:

spring:
  cloud:
    gateway:
      httpclient:
        pool:
          maxIdleTime: 10000(根据需要调整)

第1步将获取连接策略由默认的FIFO变更为LIFO,因为LIFO能够确保获取的连接最大概率是最近刚被用过的,也就是热点连接始终是热点连接,而始终用不到的连接就可以被回收掉,LRU的思想。

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值