java - Google HttpResponse - 使用重试逻辑时如何更新标头
问题描述
我正在尝试防止遇到我遇到的特定错误情况。当我发出 HttpResponse 来构建请求并执行它时,我冒着遇到一些速率限制问题的风险(即使使用 Google RateLimiter 来尝试缓解这种情况)。我认为有意义的是将 HttpBackOffUnsuccessfulResponseHandler 与 ExponentialBackoff 一起使用,这样可以解决问题(因为请求的等待时间非常短。)
但是,在测试过程中,我开始意识到我正在访问的 api 端点需要一个随机数,并且您不能使用相同的随机数连续进行相同的调用(此数据是请求标头的一部分.)
我正在尝试确定是否有一种方法可以使用现有的 HttpBackOffUnsuccessfulResponseHandler 并让它在每次重试之前更新其中一个标题。这很容易做到吗,还是我基本上必须创建自己的 HttpBackOffUnsuccessfulResponseHandler 版本?或者在这一点上,在检测到速率限制违规的情况下,手动捕获并在等待指定时间后重建/重新发送请求是否有意义?(我要访问的 API 端点将包括由于速率限制而需要等待的时间。)
我考虑过只是扩展 HttpBackOffUnsuccessfulResponseHandler 但它的实现方式,我无法覆盖可能让我有机会在重新发送请求之前更新请求的 handleResponse 调用。
我当前如何构建请求的示例如下(已清理):
//Please note these headers are just an example. This data should not be treated as real.
HttpHeaders headers = new HttpHeaders()
.setContentType("text/plain").setContentLength(0L)
.set("header-1", header1Data.toString)
.set("payload", payload.toString); // Contains the nonce that would need to be updated.
HttpResponse resp = httpRequestFactory.buildPostRequest(url, null)
.setHeaders(headers)
.setConnectTimeout(30000)
.setReadTimeout(30000)
.setUnsuccessfulResponseHandler(
new HttpBackOffUnsuccessfulResponseHandler(new ExponentialBackoff())
//BlanketBackoffRequirement is a custom implementation of the BackOffRequired interface
.setBackOffRequired(BlanketBackoffRequirement.SERVER_ERROR_OR_RATE_LIMIT)
)
.execute();
解决方案
推荐阅读
- powershell - 用于发送电子邮件的脚本不适用于 Gmail 帐户
- r - 如何捕获传递给函数的多个参数(...)的名称?
- python - 使用 Python 从文本表中提取数据
- python - 如何将 makefile 重写为 distutils.core.Extension
- sharepoint - 如何在 SharePoint Online 现代网站中自定义列表/库的列标题或为其设置样式?
- azure-devops - 如何防止直接推送到 AzureDevOps 中的 Master 分支
- bash - 查找和替换非 utf8 字符
- python - 在 Python / Cython / Numpy 中计算 2 个二进制向量之间的汉明距离的最快方法
- cognos - cognos analytics 11 中的上传文件位置在哪里?
- sql - 关键字“PIVOT”附近的语法不正确