非幂等作用&;Azure上的Blob租约

非幂等作用&;Azure上的Blob租约,azure,azure-storage,azure-storage-blobs,azure-worker-roles,Azure,Azure Storage,Azure Storage Blobs,Azure Worker Roles,我有一个多实例工作者角色 它需要做两件事 从pop收件箱下载电子邮件,保存它们,创建DB条目,然后删除电子邮件 从FTP服务器下载文件,保存它们,创建DB条目,然后删除这些文件 这两种操作都是时间敏感的,在多实例环境中,第二个实例可能会在第一个实例返回并删除文件/电子邮件之前提取重复副本 我计划围绕主下载方法实现一个同步锁机制,该方法获取blob文件的租约。目标是它将充当锁,防止另一个实例在下载保存删除操作期间发生干扰。如果实例1出现任何问题(即崩溃),那么租约最终将到期,第二个实例将在下一

我有一个多实例工作者角色

它需要做两件事

  • 从pop收件箱下载电子邮件,保存它们,创建DB条目,然后删除电子邮件
  • 从FTP服务器下载文件,保存它们,创建DB条目,然后删除这些文件
这两种操作都是时间敏感的,在多实例环境中,第二个实例可能会在第一个实例返回并删除文件/电子邮件之前提取重复副本

我计划围绕主下载方法实现一个同步锁机制,该方法获取blob文件的租约。目标是它将充当锁,防止另一个实例在下载保存删除操作期间发生干扰。如果实例1出现任何问题(即崩溃),那么租约最终将到期,第二个实例将在下一个循环中继续使用,我可以维护我的SLA


只是想知道这是否是一个可行的解决方案,或者是否有我应该知道的任何gotcha?

Blob租约是跨多个服务器的可行锁定策略


但是,我仍然会保持谨慎,将每封电子邮件的下载记录为单独的记录,这样我就可以最大限度地减少同一封电子邮件的意外重复下载。

干杯,伊戈尔,是的,在它试图保存到我们的数据库时,我仍然会进行一定程度的重复检查。