azure幂等运算的模式?

azure幂等运算的模式?,azure,azure-table-storage,idempotent,Azure,Azure Table Storage,Idempotent,有谁知道设计azure操作幂等运算的模式,特别是表存储?更常见的方法是生成一个id操作并缓存它以验证新的执行,但是,如果我有十几个工人在处理操作,这种方法会更复杂。:-) 谢谢好的,所以您没有按照和的要求提供示例。这就是说,这里有一种处理幂等运算的常用方法:将所需操作推送到WindowsAzure队列。然后,无论您拥有多少工作人员角色实例,一次只能有一个实例处理特定的队列项目。从队列中读取队列消息时,它在指定的时间内不可见 现在:在处理该消息的过程中可能会发生一些事情: 您将在超时后完成处理。

有谁知道设计azure操作幂等运算的模式,特别是表存储?更常见的方法是生成一个id操作并缓存它以验证新的执行,但是,如果我有十几个工人在处理操作,这种方法会更复杂。:-)


谢谢

好的,所以您没有按照和的要求提供示例。这就是说,这里有一种处理幂等运算的常用方法:将所需操作推送到WindowsAzure队列。然后,无论您拥有多少工作人员角色实例,一次只能有一个实例处理特定的队列项目。从队列中读取队列消息时,它在指定的时间内不可见

现在:在处理该消息的过程中可能会发生一些事情:

  • 您将在超时后完成处理。当您要删除邮件时,会出现异常
  • 您意识到时间不多了,所以增加了队列消息超时(今天,您必须调用RESTAPI来完成此操作;有一天它将包含在SDK中)
  • 出现错误,导致在您删除消息之前代码中出现异常。最终,消息在队列中再次可见(在指定的不可见超时时间之后)
  • 您可以在超时之前完成处理并成功删除邮件
这涉及并发性。对于幂等性,这取决于您是否可以确保重复操作而不会产生副作用。例如,计算某人的周薪,排队打印作业,并将周薪存储在表行中。由于某些原因,出现了一个失败,您可能从未删除过该消息,或者您的代码在获得删除该消息的机会之前中止

时间快进,另一个worker实例(甚至可能是同一个)重新读取此消息。此时,从理论上讲,您应该能够简单地重新执行所需的操作。如果在你的例子中这真的不可能,你就没有幂等运算。但是,有一些机制可以帮助您解决这一问题:

  • 每个队列消息都有一个出列计数。您可以使用它来确定队列消息之前是否已处理,如果已处理,则采取适当的操作(例如,可能检查该员工的表行)
  • 也许您的处理流程中有一些阶段是无法重复的。在这种情况下:您现在可以在队列消息对其他人不可见且由您处理时修改队列消息内容。因此,想象一下附加类似于| SalaryServices的东西,称为。然后稍晚一点,添加| PrintJobQueued,依此类推。现在,如果您的管道出现故障,您可以在下次阅读邮件时找出您的中断位置
希望有帮助。这有点像是在黑暗中拍摄,不知道你想要实现什么


编辑:我想我应该提到,我没有看到幂等性和表存储之间的联系。我认为这更像是一个并发问题,因为无论是使用表存储、SQL Azure还是任何其他存储容器,都需要处理幂等性。

好的,所以您没有按照和的要求提供示例。这就是说,这里有一种处理幂等运算的常用方法:将所需操作推送到WindowsAzure队列。然后,无论您拥有多少工作人员角色实例,一次只能有一个实例处理特定的队列项目。从队列中读取队列消息时,它在指定的时间内不可见

现在:在处理该消息的过程中可能会发生一些事情:

  • 您将在超时后完成处理。当您要删除邮件时,会出现异常
  • 您意识到时间不多了,所以增加了队列消息超时(今天,您必须调用RESTAPI来完成此操作;有一天它将包含在SDK中)
  • 出现错误,导致在您删除消息之前代码中出现异常。最终,消息在队列中再次可见(在指定的不可见超时时间之后)
  • 您可以在超时之前完成处理并成功删除邮件
这涉及并发性。对于幂等性,这取决于您是否可以确保重复操作而不会产生副作用。例如,计算某人的周薪,排队打印作业,并将周薪存储在表行中。由于某些原因,出现了一个失败,您可能从未删除过该消息,或者您的代码在获得删除该消息的机会之前中止

时间快进,另一个worker实例(甚至可能是同一个)重新读取此消息。此时,从理论上讲,您应该能够简单地重新执行所需的操作。如果在你的例子中这真的不可能,你就没有幂等运算。但是,有一些机制可以帮助您解决这一问题:

  • 每个队列消息都有一个出列计数。您可以使用它来确定队列消息之前是否已处理,如果已处理,则采取适当的操作(例如,可能检查该员工的表行)
  • 也许您的处理流程中有一些阶段是无法重复的。在这种情况下:您现在可以在队列消息对其他人不可见且由您处理时修改队列消息内容。因此,想象一下附加类似于| SalaryServices的东西,称为。然后稍晚一点,添加| PrintJobQueued,依此类推。现在,如果您的管道出现故障,您可以在下次阅读邮件时找出您的中断位置
希望有帮助。有点像在黑暗中射击