JerryChin / wechatpay-spring-boot-project

Unofficial implementation of WeChat Pay SpringBoot Integration, Yummy!
Apache License 2.0
6 stars 4 forks source link

api.weixin.qq.com:443 failed to respond #1

Open chenwei7878 opened 1 year ago

chenwei7878 commented 1 year ago

请求量大的时候会出现api.weixin.qq.com:443 failed to respond 业务异常 org.springframework.web.client.ResourceAccessException: I/O error on POST request for "https://api.mch.weixin.qq.com/v3/payroll-card/transfer-batches": api.mch.weixin.qq.com:443 failed to respond; nested exception is org.apache.http.NoHttpResponseException: api.mch.weixin.qq.com:443 failed to respond at org.springframework.web.client.RestTemplate.doExecute$original$m1YQSyES(RestTemplate.java:748) at org.springframework.web.client.RestTemplate.doExecute$original$m1YQSyES$accessor$nOpNVewP(RestTemplate.java) at org.springframework.web.client.RestTemplate$auxiliary$e78KWeJb.call(Unknown Source) at org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstMethodsInter.intercept(InstMethodsInter.java:86) at

JerryChin commented 1 year ago

Hi @chenwei7878,这个问题可能有如下原因:

  1. Persistent connection keep-alive 期间服务端关闭了连接,导致连接失效。
  2. 服务端压力过大,直接断开了连接,有可能处理完请求也有可能没有处理。
  3. 网络连接不稳定,网络层有超时问题。

不过无论哪一种原因都和本仓库代码无关。

对于第 1 种情况可以通过 HttpClientBuilderConfigurer 自定义 HttpClient 的 IdleTimeout 和 KeepAliveTimeout 设置。 对于第 2 和 3 种情况如果是幂等操作的话,可以考虑重试操作。

如果比较熟悉网络原理的话可以同时从网络层分析。