Azure文件系统 - 我可以“观看”还是仅进行投票?

时间:2015-10-16 20:00:56

标签: c# azure

我是一位经验丰富的Windows C#开发人员,但对Azure世界来说是新手,因此在我实施一个或多个Azure云服务时试图找出“最佳实践”。

我有许多(外部和我无法控制)来源,可以将文件全部保存到文件夹(或可能是一组文件夹)。在Windows系统的当前状态下,我设置了一个FileSystemWatcher来监视文件夹,并在文件出现时引发事件。

在Azure的世界中,有什么相同的方法呢?或者有吗?

我知道我可以创建一个计时器(或睡眠)来传递一些时间(比如30秒),并轮询该文件夹,但我不确定这是云环境中的“最佳”方式。

重要的是要注意我无法控制输入 - 换句话说,文件是由我无法控制的外部设备保存的;所以我不能,例如,在保存文件时将消息推送到队列,并回复该消息......

虽然,最终,这是目标......所以我打算有一个“Watcher”服务,它将(通过事件或轮询)检测一个或多个文件的存在,并将消息推送到适当的队列为我的工作流程中的下一步做出回应。

应该注意的是,我使用的是VS2015,以及最新的Azure SDK,所以我不会受到任何遗留问题的限制。

到目前为止我所拥有的基本上是这个(一个更大的代码库的片段):

storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create a CloudFileClient object for credentialed access to File storage.
fileClient = storageAccount.CreateCloudFileClient();

// Obtain the file share name from the config file
string sharenameString = CloudConfigurationManager.GetSetting("NLRB.Scanning.FileSharename");

// Get a reference to the file share.
share = fileClient.GetShareReference(sharenameString);

// Ensure that the share exists.
if (share.Exists())
{
    Trace.WriteLine("Share exists.");
    // Get a reference to the root directory for the share.
    rootDir = share.GetRootDirectoryReference();

    //Here is where I want to start watching the folder represented by rootDir...
}

提前致谢。

5 个答案:

答案 0 :(得分:1)

如果您使用的是附加磁盘(或本地暂存磁盘),行为就像在任何其他Windows计算机上一样,因此您只需使用FileSystemWatcher相应地设置文件监视器并处理回调像往常一样。

有Azure文件服务,它是SMB即服务,可以支持您在本地网络上的常规SMB卷上执行的任何操作。

有Azure blob存储空间。这些可以被观看。你必须轮询一下blob容器的更改。

答案 1 :(得分:1)

您可以创建一个循环,定期轮询根目录 CloudFileDirectory.ListFilesAndDirectories方法。 https://msdn.microsoft.com/en-us/library/dn723299.aspx

您还可以编写一个小的递归方法在子目录中调用它。

要检测差异,您可以构建所有文件和目录的内存哈希映射。如果你想要一个类似持久分布式缓存的东西,那么你可以使用ie。 Redis保留这个文件/目录列表。每次轮询文件或目录是否不在列表中时,您都会检测到root下的新文件/目录。

您可以分离检测责任和业务逻辑,即。一个辅助角色继续轮询目录并将新文件写入队列,并且使用者结束另一个使用该信息进行处理的辅助角色/ Web服务。

答案 2 :(得分:0)

Azure Blob存储通过Azure事件网格推送事件。 Blob存储具有两种事件类型,Microsoft.Storage.BlobCreated和Microsoft.Storage.BlobDeleted。因此,除了进行长时间轮询外,您只需对创建的事件做出反应即可。

有关更多信息,请参见此链接:

https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-event-overview

答案 3 :(得分:0)

我有一个非常相似的要求。我使用了BOX应用程序。它具有Webhook功能,用于处理文件或文件夹中发生的事件:例如添加,移动,删除等。

Azure Autromation还提供了一些较新的替代方法。

答案 4 :(得分:-1)

我对Azure也很陌生,实际上我正在调查一个文件监视器类型的东西。我正在考虑涉及Azure功能的内容,因此,这看起来像是在创建或更新博客时触发某些代码的方式。还有一种指定模式的方法:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob