服务端使用Http请求接口时当请求量稍大时,有关timeout的配置注意点

1.背景

A系统采集一批物联网设备上报的数据,这个时候有个第三方系统B系统也需要物联网的数据,B系统提供了一个接口供A系统调用推送,在代码中采用http方式进行推送。


2.问题

如果A系统创建了一个Http线程池,供调用接口推送数据时使用,假设这一批物联网设备每秒80个请求,connectTimeout设置为3秒,readTimeout也设置为3秒,此时会有2种情形

  1. B系统挂掉了,那么A系统发送http请求时,等待3秒后会抛出 java.net.SocketTimeoutException: connect timed out,等到第4秒时才会释放第一批占用的连接资源,也就是会有240个连接一直不能释放
  2. 假设B系统接口响应为5秒,那么A系统发送http请求时(假设连接时间忽略),同上面一样也会有240个连接一直不能释放
  3. 极端情况下,B系统因为自身问题,A系统发送http请求时,连接时间需要2秒,响应时间为5秒,那么这种请求下,需要5秒才能释放一个连接资源,总共可能就有350个连接资源一直被占用

上面的几点都很可能会把A系统给拖挂。


3.使用注意

针对2的问题,可以根据自身的业务场景对connectTimeout和readTimeout分别设置调优

如果推送数据给对方,并且不关注对方的接口响应,connectTimeout和readTimeout可以根据自己的系统来适当调小,当然如果readTimeout过小,可能会抛java.net.SocketTimeoutException: Read timed out异常,但是实测对方系统是能接收到你推送的数据的。所以这种情况可能需要自己去做一些处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值