Title: 调用微信接口异常重试逻辑问题 · Issue #2098 · binarywang/WxJava · GitHub
Open Graph Title: 调用微信接口异常重试逻辑问题 · Issue #2098 · binarywang/WxJava
X Title: 调用微信接口异常重试逻辑问题 · Issue #2098 · binarywang/WxJava
Description: 简要描述 调用微信接口响应超时异常,会导致重复调用接口,从而导致重复发送模板消息、客服消息等 模块版本情况 WxJava 模块名: weixin-java-mp WxJava 版本号: 4.0.8.B 详细描述 重试逻辑有问题,问题代码 errorCode == -1 时会重试 https://github.com/Wechat-Group/WxJava/blob/15bd95c3cbbfcd9a5eee93e209207cd245f4e81a/weixin-java-...
Open Graph Description: 简要描述 调用微信接口响应超时异常,会导致重复调用接口,从而导致重复发送模板消息、客服消息等 模块版本情况 WxJava 模块名: weixin-java-mp WxJava 版本号: 4.0.8.B 详细描述 重试逻辑有问题,问题代码 errorCode == -1 时会重试 https://github.com/Wechat-Group/WxJava/blob/15bd95c3cbbfc...
X Description: 简要描述 调用微信接口响应超时异常,会导致重复调用接口,从而导致重复发送模板消息、客服消息等 模块版本情况 WxJava 模块名: weixin-java-mp WxJava 版本号: 4.0.8.B 详细描述 重试逻辑有问题,问题代码 errorCode == -1 时会重试 https://github.com/Wechat-Group/WxJava/blob/15bd95c3cbbfc...
Opengraph URL: https://github.com/binarywang/WxJava/issues/2098
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"调用微信接口异常重试逻辑问题","articleBody":"### 简要描述\r\n调用微信接口响应超时异常,会导致重复调用接口,从而导致重复发送模板消息、客服消息等\r\n\r\n### 模块版本情况\r\n* WxJava 模块名: weixin-java-mp\r\n* WxJava 版本号: 4.0.8.B\r\n\r\n### 详细描述\r\n重试逻辑有问题,问题代码\r\n\u003e errorCode == -1 时会重试\r\n\r\nhttps://github.com/Wechat-Group/WxJava/blob/15bd95c3cbbfcd9a5eee93e209207cd245f4e81a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java#L336-L353\r\n\u003e 请求超时(连接超时、响应超时),WxError.getErrorCode() 默认是 -1\r\n\r\nhttps://github.com/Wechat-Group/WxJava/blob/15bd95c3cbbfcd9a5eee93e209207cd245f4e81a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java#L401-L404\r\n\r\nhttps://github.com/Wechat-Group/WxJava/blob/15bd95c3cbbfcd9a5eee93e209207cd245f4e81a/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxErrorException.java#L25-L28\r\n\r\n\u003e 以下异常定义\r\n\r\n```java\r\n// errorCode == -1 \r\nthrow new WxErrorException(\"请先设置WebhookKey\");\r\n```\r\n\r\n基于以上代码,可以发现\r\n- `IOException`异常会导致重试(猜测这个并不需要重试,会导致响应超时异常也重复调用接口,影响:调用发送模板、发送群推等接口会导致用户收到多条)\r\n- `throw new WxErrorException(\"异常信息\")`定义异常会导致重试\r\n- 微信官方接口返回`{\"errcode\":-1,\"errmsg\":\"system error rid: 60891646-03eed615-7f6889ef\"}`会重试(猜测实现重试是这个意图)\r\n### 日志\r\n\u003e 此处复现的是连接超时导致重试(响应超时也会存在重试问题)\r\n\r\n```text\r\n2021-04-29 11:59:20.825 ERROR 6517 --- [sync-scheduler1] m.c.w.mp.api.impl.BaseWxMpServiceImpl : \r\n【请求地址】: https://api.weixin.qq.com/cgi-bin/material/get_materialcount?access_token=token脱敏\r\n【请求参数】:null\r\n【异常信息】:java.net.SocketException: Connection reset\r\n2021-04-29 11:59:20.827 WARN 6517 --- [sync-scheduler1] m.c.w.mp.api.impl.BaseWxMpServiceImpl : 微信系统繁忙,1000 ms 后重试(第1次)\r\n2021-04-29 11:59:26.836 ERROR 6517 --- [sync-scheduler1] m.c.w.mp.api.impl.BaseWxMpServiceImpl : \r\n【请求地址】: https://api.weixin.qq.com/cgi-bin/material/get_materialcount?access_token=token脱敏\r\n【请求参数】:null\r\n【异常信息】:java.net.SocketException: Connection reset\r\n2021-04-29 11:59:26.836 WARN 6517 --- [sync-scheduler1] m.c.w.mp.api.impl.BaseWxMpServiceImpl : 微信系统繁忙,2000 ms 后重试(第2次)\r\n2021-04-29 11:59:33.840 ERROR 6517 --- [sync-scheduler1] m.c.w.mp.api.impl.BaseWxMpServiceImpl : \r\n【请求地址】: https://api.weixin.qq.com/cgi-bin/material/get_materialcount?access_token=token脱敏\r\n【请求参数】:null\r\n【异常信息】:java.net.SocketException: Connection reset\r\n2021-04-29 11:59:33.840 WARN 6517 --- [sync-scheduler1] m.c.w.mp.api.impl.BaseWxMpServiceImpl : 微信系统繁忙,4000 ms 后重试(第3次)\r\n2021-04-29 11:59:42.848 ERROR 6517 --- [sync-scheduler1] m.c.w.mp.api.impl.BaseWxMpServiceImpl : \r\n【请求地址】: https://api.weixin.qq.com/cgi-bin/material/get_materialcount?access_token=token脱敏\r\n【请求参数】:null\r\n【异常信息】:java.net.SocketException: Connection reset\r\n2021-04-29 11:59:42.848 WARN 6517 --- [sync-scheduler1] m.c.w.mp.api.impl.BaseWxMpServiceImpl : 微信系统繁忙,8000 ms 后重试(第4次)\r\n2021-04-29 11:59:55.866 ERROR 6517 --- [sync-scheduler1] m.c.w.mp.api.impl.BaseWxMpServiceImpl : \r\n【请求地址】: https://api.weixin.qq.com/cgi-bin/material/get_materialcount?access_token=token脱敏\r\n【请求参数】:null\r\n【异常信息】:java.net.SocketException: Connection reset\r\n2021-04-29 12:00:26.431 WARN 6517 --- [sync-scheduler1] m.c.w.mp.api.impl.BaseWxMpServiceImpl : 微信系统繁忙,16000 ms 后重试(第5次)\r\n2021-04-29 12:01:10.443 ERROR 6517 --- [sync-scheduler1] m.c.w.mp.api.impl.BaseWxMpServiceImpl : \r\n【请求地址】: https://api.weixin.qq.com/cgi-bin/material/get_materialcount?access_token=token脱敏\r\n【请求参数】:null\r\n【异常信息】:java.net.SocketException: Connection reset\r\n2021-04-29 12:01:10.445 WARN 6517 --- [sync-scheduler1] m.c.w.mp.api.impl.BaseWxMpServiceImpl : 重试达到最大次数【5】\r\n```\r\n\r\n### 修复建议\r\nhttps://github.com/Wechat-Group/WxJava/blob/15bd95c3cbbfcd9a5eee93e209207cd245f4e81a/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxErrorException.java#L11-L13\r\nhttps://github.com/Wechat-Group/WxJava/blob/15bd95c3cbbfcd9a5eee93e209207cd245f4e81a/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxErrorException.java#L25-L28\r\n初始化默认值-1,改成其他(比如-99、-10000等),保证不和微信接口官方返回错误码重复即可","author":{"url":"https://github.com/foreveryang321","@type":"Person","name":"foreveryang321"},"datePublished":"2021-04-29T05:24:58.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":1},"url":"https://github.com/2098/WxJava/issues/2098"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:0acd5cab-75a2-8d25-6413-fe88f0f0a1fa |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | DC76:3EE28E:2E02937:3F15953:6964E4B6 |
| html-safe-nonce | fea4c74f8e3c4366d249c19b6cc52b72803ee4747216626cfe2f94295d9fd4c7 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEQzc2OjNFRTI4RToyRTAyOTM3OjNGMTU5NTM6Njk2NEU0QjYiLCJ2aXNpdG9yX2lkIjoiODkwMjYyMTA1MDU3NDI2NzU3NCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | a750879027811d60b0212a45e0febba7bf236910480386b261c80176ae0d4dee |
| hovercard-subject-tag | issue:870623168 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/binarywang/WxJava/2098/issue_layout |
| twitter:image | https://opengraph.githubassets.com/889d809ee0ead037d047c4c2a96734ef48ff3732c276dcd762d84566779d950f/binarywang/WxJava/issues/2098 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/889d809ee0ead037d047c4c2a96734ef48ff3732c276dcd762d84566779d950f/binarywang/WxJava/issues/2098 |
| og:image:alt | 简要描述 调用微信接口响应超时异常,会导致重复调用接口,从而导致重复发送模板消息、客服消息等 模块版本情况 WxJava 模块名: weixin-java-mp WxJava 版本号: 4.0.8.B 详细描述 重试逻辑有问题,问题代码 errorCode == -1 时会重试 https://github.com/Wechat-Group/WxJava/blob/15bd95c3cbbfc... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | foreveryang321 |
| hostname | github.com |
| expected-hostname | github.com |
| None | 5838582163a1256e5ebd5086b7e1dc5cea93d82086c9c8b1395fb50f6ddab28d |
| turbo-cache-control | no-preview |
| go-import | github.com/binarywang/WxJava git https://github.com/binarywang/WxJava.git |
| octolytics-dimension-user_id | 1343140 |
| octolytics-dimension-user_login | binarywang |
| octolytics-dimension-repository_id | 49122742 |
| octolytics-dimension-repository_nwo | binarywang/WxJava |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 49122742 |
| octolytics-dimension-repository_network_root_nwo | binarywang/WxJava |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 8edad3509fd3b4374694551987974bbbcfd316c0 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width