我需要一些帮助来理解交易和幂等性。
注意:如果您的应用在提交事务时收到异常,并不总是意味着事务失败。在事务已提交并最终将成功应用的情况下,您可能会收到 Timeout、TransactionFailedError 或 InternalError 异常。尽可能使您的数据存储事务具有幂等性,这样如果您重复事务,最终结果将是相同的。
我有一个游戏,当发生特殊情况时,玩家会收到一封电子邮件。有一个错误是玩家有时会收到 2 封(或更多)电子邮件。我相信这是因为我在交易内部处理游戏规则,但在外部发送电子邮件。
一些伪代码:
def game_update(orders_from_player):
emails_to_send = db.run_in_transaction(process_player_orders, orders_from_player)
for e in emails_to_send:
send_email(e)
是不是这样说,在交易冲突时,我应该期望再次发送电子邮件列表?
是整个请求重复,还是只是对事务过程的调用。(在本例中为 process_player_orders)
我很困惑。