这将是一个组合问题位,主要是因为我想得到一些更多的背景资料。你知道吗
主要问题是:
我正在尝试执行一个事务,该事务涉及对另一个REST服务的RPC调用,该调用将更新一些远程数据。例如,假设RPC调用告诉远程服务器我购买了一些东西。在非函数python伪代码中,它将类似于:
def txn_purchase():
a = ModelA.objects.get(blah)
httpresult = HttpPurchaseRPC(url, a.foo)
a.receipt = httpresult.get_receipt() # This raises an error if the request fails
a.save()
db.run_in_transaction(txn_purchase)
我非常确定事务只确保数据存储的一致性(因此在本例中,实体a将是一致的),而不能确保与RPC的一致性。有没有可能在此基础上构建一些东西来确保与RPC的一致性呢?你知道吗
在我看来,如果RPC成功,但数据存储事务未能保存,那么我可能会遇到一个潜在的问题。我该怎么办?你知道吗
我脑海中模糊的概念是实施两阶段购买:
这是“最佳实践”方法吗,还是有更好的方法?你知道吗
交易背景问题:
谢谢!你知道吗
在这里您的想法是正确的:您应该这样做:将RPC分配给一个单独的deferred task。在事务中排队的任务可以设置flag,以确保它们只有在事务成功时才排队。你知道吗
没有运行事务的神奇后端。它们不会自动重试:同样,除非它们是任务的一部分,因为任务会被重试,直到它们成功返回。你知道吗
相关问题 更多 >
编程相关推荐