Closed ningnao closed 1 year ago
重试前会打印日志,会把捕获的 IOException 输出,然后执行重试。
@ningnao 你实际遇到的异常是?我看你写到“订单状态能正确返回”,是真的有异常吗?
重试前会打印日志,会把捕获的 IOException 输出,然后执行重试。
@ningnao 你实际遇到的异常是?我看你写到“订单状态能正确返回”,是真的有异常吗?
重试后确实获取到了数据,但似乎第一次请求查询订单状态时必定会出现重试,这是预期的效果吗
我怀疑是 HTTP 长链接已经断了,但是 OkHttp 并不知道,所以第一次就会重试。之前不出现异常,是因为 OkHttp 的 retryOnConnectionFailure
帮你重试了。现在主动关闭了,但在重试时会输出日志,你可能感觉到了这一点。
你做一个实验,不开启双域名,但是 disableRetryOnConnectionFailure
,看看是否会直接失败。这样能推断出是否跟双域名重试有关系。
我怀疑跟你的使用模式和网络情况有关系,看看以下两个问题:
试了一下,使用disableRetryOnConnectionFailure
,不开启双域名,第一次请求直接失败
你提到的两个问题: 1.或许是跟我的使用方式用关系,我是在一段时间后未收到回调才尝试查询订单,间隔大约20S 2.是直接访问的微信支付服务
或许是跟我的使用方式用关系,我是在一段时间后未收到回调才尝试查询订单,间隔大约20S
微信支付的 Connection Keep-Alive 大概是8s,20s 服务器端一定断连接了。
你可以试试自定义 ConnectionPool 的 keepAliveDuration,在微信支付服务器断掉之前先清理空闲连接,还会不会失败。
OkHttpClient client = new OkHttpClient.Builder()
.retryOnConnectionFailure(false)
.connectionPool(new ConnectionPool(5, 5, TimeUnit.SECONDS))
.build();
HttpClient httpClient =
new DefaultHttpClientBuilder()
.config(config)
.okHttpClient(okHttpClient)
.build();
不过,最终还是要根据生产环境的实际访问情况,选择合适的配置。以上仅供实验。
你可以试试自定义 ConnectionPool 的 keepAliveDuration,在微信支付服务器断掉之前先清理空闲连接,还会不会失败。
经测试,自定义OkHttpClient,指定keepAliveDuration
后不再失败了。
感觉可以在文档中补充说明一下这一点...
错误描述
按照文档中的说明,启用双域名容灾后,请求Native支付的订单查询接口,OkHttp抛出异常,但仍能正确返回查询结果 异常信息如下
重现bug的步骤
1.按照文档说明,启用双域名容灾 2.创建
NativePayService
,调用queryOrderByOutTradeNo()
方法查询订单状态 3.OkHttp抛出异常,但订单状态能正确返回预期行为
无异常
导致错误的代码片段
操作系统
Windows 11 25387.1
Java 版本
1.8
wechatpay-java 版本
v0.2.8
其他信息
No response