首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现条形幂等键

问如何实现条形幂等键
EN

Stack Overflow用户
提问于 2018-05-28 17:20:04
回答 1查看 2.6K关注 0票数 3

我有一批顾客,我想对他们进行批量收费。有时由于网络的原因,有些收费不会通过,而有些则会因此提出新的请求,再次向所有客户收费。我读到我可以使用幂等性,但注意到每次我提出请求时都会重新生成密钥。如何实现生成密钥以标识每个用户,而不将密钥存储在DB中,因为它是临时密钥?

代码语言:javascript
复制
 for(customer in customers){
     stripe.charges.create({
        amount: 2000,
        currency: "usd",
        source: token,
        customer: stripe_customerId,
    }, {
       idempotency_key: uuid
    }, function(err, charge) {
        // asynchronously called
    });
}

对此有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-28 17:35:51

首先,您可能不想对这样的异步代码执行for循环;如果您有n客户要付费,您将同时发出n请求,这可能会导致一系列问题。

其次,您使用的是收费代码,用于从Stripe令牌(而不是从客户处收取费用 )创建一次性收费。

假设您实际上已经保存了客户ID,那么您可能需要考虑使用类似于异步的东西。

我将使用#queue进行处理,并将其拆分如下:

  1. 遍历客户,为每个客户创建一个“任务”,其中包括customer ID、amount、currency、新生成的idempotency_key和attempt_count,然后将该任务推入队列;
  2. 在队列“处理”函数中,我将尝试用该任务及其数据创建一个电荷,如果由于网络或其他可还原的错误而失败,我将增加attempt_count并将其推回队列,以便重新尝试。我可能还会有一个测试来限制重试的次数,并跳过/记录任何失败的,即5次。
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50571031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档