设置http超时时间过短容易出现的问题

设置http超时时间过短容易出现的问题,第1张

设置http超时时间为30S,支付系统请求渠道,渠道超过30S后仍未返回结果,请求自动断开链接返回处理超时,订单状态为处理中渠道返回的支付请求流水号为空,通过查询定时任务查询为无此订单。渠道实际用时1分40秒后已处理了订单为交易成功,因为http断开链接后无法收取渠道响应信息订单仍按无返回信息记录为处理中,触发查询定时任务后一直是查不到渠道相关交易,如果系统设置超过30分钟查询仍返回无此订单将交易设置为失败,就会存在重复付款的问题。

HttpParams params = new BasicHttpParams()

//设置连接超时时间

Integer CONNECTION_TIMEOUT = 2 * 1000//设置请求超时2秒钟 根据业务调整

Integer SO_TIMEOUT = 2 * 1000//设置等待数据超时时间2秒钟 根据业务调整

//定义了当从ClientConnectionManager中检索ManagedClientConnection实例时使用的毫秒级的超时时间

//这个参数期望得到一个java.lang.Long类型的值。如果这个参数没有被设置,默认等于CONNECTION_TIMEOUT,因此一定要设置

Long CONN_MANAGER_TIMEOUT = 500L//该值就是连接不够用的时候等待超时时间,一定要设置,而且不能太大 ()

params.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, CONNECTION_TIMEOUT)

params.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, SO_TIMEOUT)

params.setLongParameter(ClientPNames.CONN_MANAGER_TIMEOUT, CONN_MANAGER_TIMEOUT)

//在提交请求之前 测试连接是否可用

params.setBooleanParameter(CoreConnectionPNames.STALE_CONNECTION_CHECK, true)

PoolingClientConnectionManager conMgr = new PoolingClientConnectionManager()

conMgr.setMaxTotal(200)//设置整个连接池最大连接数 根据自己的场景决定

//是路由的默认最大连接(该值默认为2),限制数量实际使用DefaultMaxPerRoute并非MaxTotal。

//设置过小无法支持大并发(ConnectionPoolTimeoutException: Timeout waiting for connection from pool),路由是对maxTotal的细分。

conMgr.setDefaultMaxPerRoute(conMgr.getMaxTotal())//(目前只有一个路由,因此让他等于最大值)

//另外设置http client的重试次数,默认是3次;当前是禁用掉(如果项目量不到,这个默认即可)

httpClient.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false))


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/11289740.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存