我有近300个线程试图访问一个具有非常低的分配读/写容量(5 /秒)的DynamoDB表。所以负载显然太高,我从ProvisionedThroughputExceededException得到DynamoDBMapper。问题是:如何让DynamoDBMapper等待+重试而不是失败?
我在ExponentialBackoffStrategy上使用AmazonDynamoDBClient,延迟时间很长(基数为100毫秒,重试次数为12次,因此产生:100毫秒,200毫秒,400毫秒,... 409600毫秒),但它不起作用。事实上,它立即失败了。根据{{3}}:
ProvisionedThroughputExceededException
消息:您超出了允许的最大预配置吞吐量 对于表或一个或多个全局二级索引。查看 预配置吞吐量与消耗的性能指标 吞吐量,打开Amazon CloudWatch控制台。
示例:您的请求率过高。适用于DynamoDB的 AWS开发工具包 自动重试接收此异常的请求。你的申请 最终成功,,除非你的重试队列太大了 完成的。使用指数退避降低请求频率。
我做错了什么?
“太大而无法完成”是什么意思?
谢谢!
如果您想知道为什么我使用300个线程,分配的容量较低并且可以接受较长的响应时间:通常我们使用更高的容量,如果容量较低,我只是不希望应用程序失败。
答案 0 :(得分:0)
好的我有一个错误的重试条件。然后,您还需要调整最大重试次数,以及可能的延迟(最大值,基数)。