我在项目中编写了一些用于更新订阅的自定义逻辑,但在某些时候开始收到错误:
com.stripe.exception.RateLimitException: You are updating the subscription too frequently. Please slow down and try again or visit https://support.stripe.com/contact for help.; code: rate_limit; request-id: req_XXXXXXXXXXXX
at com.stripe.net.LiveStripeResponseGetter.handleApiError(LiveStripeResponseGetter.java:215)
at com.stripe.net.LiveStripeResponseGetter.handleError(LiveStripeResponseGetter.java:143)
at com.stripe.net.LiveStripeResponseGetter.request(LiveStripeResponseGetter.java:67)
at com.stripe.model.Subscription.update(Subscription.java:1240)
at com.stripe.model.Subscription.update(Subscription.java:1186)
...
遇到这种情况如何排查?我如何知道 Stripe Java SDK 向服务器发送了什么类型以及多少个 http 请求?
当每秒超过 100 次读取或 100 次写入时,Stripe 的标准速率限制错误就会发生[1]。某些对象(例如订阅)对其更新频率有进一步的限制,这看起来就是您在这里遇到的情况。发生此错误的原因是您更新此特定订阅的频率超过了 Stripe 允许更新特定订阅的频率。如果您经常在实时模式下遇到此错误,那么评估您为何如此频繁地进行更新并查看是否可以组合或以其他方式合并更新以减少这些 API 调用的频率可能是有意义的。 Stripe 关于速率限制的一般建议在这里仍然会有所帮助:您可以重试此调用,但每次重试之间的等待时间会呈指数级增长。
回答您的实际问题。您的 Stripe 仪表板 [2] 包含您进行的所有 API 调用的日志。如果您不确定您的应用程序发出了哪些请求,您可以查看收到该错误时的时间范围。 Stripe 的 Java SDK 中的方法与库进行的 API 调用一一对应。因此,如果您进行
Subscription.update
调用,SDK 将对 Stripe 的服务器进行一次调用。您可以将库配置为在出现此类错误时重试失败的调用[3],但对于此类调用,java SDK 仍一次只会发出一个请求。
[1] https://docs.stripe.com/rate-limits
[2] https://dashboard.stripe.com/test/logs
[3] https://github.com/stripe/stripe-java?tab=readme-ov-file#configuring-automatic-retries