【问题标题】:.Net Core - AWS DynamoDb With Retry Policies.Net Core - 具有重试策略的 AWS DynamoDb
【发布时间】:2022-08-15 03:56:33
【问题描述】:

我想将重试模式与 Aws DynamoDb 一起使用。我不知道我是否可以使用 nuget 的 Polly 包。我研究了很多,但我学会了如何实现 Polly,但我找不到如何将 Polly 与 DynamoDb 连接起来。

有什么方法可以将 Polly 重试策略与 Aws DynamoDb 一起使用?

我会给你一个示例代码块,我想知道如何用 DynamoDb 实现它

Policy
  .WaitAndRetryAsync(
    5, 
    retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), 
    (exception, timeSpan, context) => {
      // do something
    }
  );

我是 Aws Services 的新手,您能给我一些建议吗?

    标签: c# amazon-web-services .net-core amazon-dynamodb polly


    【解决方案1】:

    如果您使用 .NET SDK for DynamoDb,那么您可以执行以下操作:

    待装饰方法

    假设您有这样的简单点查询:

    public int GetAlternativeKey(int hashKey, string rangeKey)
    {
      var client = new AmazonDynamoDBClient();
      var table = Table.LoadTable(client, "LookupTable");
      var item = table.GetItem(hashKey, rangeKey);
      return (int)item["Id"];
    }
    

    重试策略

    throttling 的情况下触发重试

    var retry policy = Policy
      .Handle<ThrottlingException>()
      .Or<ProvisionedThroughputExceededException>()
      .WaitAndRetry(5, 
        retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))
      );
    

    笔记

    请记住对幂等操作使用重试策略

    用策略装饰方法

    如果您已将要装饰的方法(以及策略)定义为同步

    policy.Execute(() => GetAlternativeKey(hk, rk));
    

    如果您已将它们定义为异步

    await policy.ExecuteAsync(async () => await GetAlternativeKey(hk, rk));
    

    更新#1

    如果我理解正确,这些只是你分享的我可以拥有的错误。

    不,那不是真的。这些只是例子。这个库可以抛出的大部分异常都继承自AmazonDynamoDBException。请参见继承层次部分以获取派生异常的完整列表。

    您谈到仅将其用于幂等操作。幂等操作是什么意思?您是否建议我仅将重试策略与 GET 操作一起使用,而不是在 POST 中使用它们?

    在重新执行的情况下,幂等操作不会导致任何不需要的行为(如重复插入、计数器上的多个增量等)。如果插入,您可以将 conditional check for not existence 作为 putItem 请求的一部分。另请检查幂等性documentation 的部分。

    【讨论】:

    • 如果我理解正确,这些只是你分享的我可以拥有的错误。如果我根据这些错误设计我的策略,我可以使用我的策略而不是ExecuteAsync 方法。我现在这部分没问题,非常感谢。而且您谈到仅将其用于幂等操作。幂等操作是什么意思?您是否建议我仅将重试策略与 GET 操作一起使用,而不是在 POST 中使用它们?实际上,如果由于暂时的网络问题而无法从 DynamoDb 获取/设置数据,我只需要重试几次。我相信这种方式会更有弹性。
    • @jack 这些都是好问题。我将在接下来的 12 小时内解决所有这些问题。我现在在我的手机上。
    • @jack 我更新了我的帖子,为您的问题提供答案。请重温
    猜你喜欢
    • 2020-11-02
    • 2021-04-08
    • 2020-04-21
    • 2020-05-22
    • 2022-10-25
    • 2021-11-04
    • 2018-05-22
    • 1970-01-01
    • 2020-04-06
    相关资源
    最近更新 更多