监视Azure blob存储中的容器以进行更改的最佳方法是什么?

时间:2012-01-17 04:53:54

标签: c# azure azure-storage azure-storage-blobs

我正在寻找监控Azure blob存储中的容器/文件夹以进行更改的最佳方法。到目前为止,我只找到了一种方法,即在某个地方运行一个工作进程,定期查看容器的内容以查找更改。

有更好的方法吗?

7 个答案:

答案 0 :(得分:9)

Storage SDK不提供此功能,但它是新WebJobs SDK的主要功能。有一个[BlobInput]属性允许您指定要侦听的容器,它包含一个有效的blob侦听器,当检测到新的blob时,它将调度到该方法。有一些blob监听示例:http://blogs.msdn.com/b/jmstall/archive/2014/02/18/azure-storage-bindings-part-1-blobs.aspx

以下是一个示例用法:

    public static void CopyWithStream(
        [BlobInput("container/in/{name}")] Stream input,
        [BlobOutput("container/out1/{name}")] Stream output
        )
    {
        Debug.Assert(input.CanRead && !input.CanWrite);
        Debug.Assert(!output.CanRead && output.CanWrite);

        input.CopyTo(output);
    }

blob听众在这里:

        JobHost host = new JobHost(acs); // From nuget: Microsoft.WindowsAzure.Jobs.Host
        host.RunAndBlock();  

答案 1 :(得分:4)

正如其他人所说,在合理的时间间隔内为您的申请进行投票是可以的。但是您不需要检查内容本身。您可以检查ETag(如果使用普通HTTP),或者如果您使用的是API,则可以检查BlobProperties.LastModifiedUtc

答案 2 :(得分:1)

没有更好的方法,恕我直言。抱歉。 HTH

答案 3 :(得分:1)

假设您可以控制更新/更改blob的代码,您可以使用SignalR在blob更改时生成推送通知,从而避免重复轮询。

答案 4 :(得分:0)

Igor是对的,因为你需要轮询容器。我只想澄清一些事情。当你说:

  

在某个地方运行一个工作进程,定期ping容器的内容以查找更改

工作进程可以是Web角色或工作者角色中的线程,Run()循环等。它不需要单独的角色。只需确保您的轮询代码适用于多个角色实例(例如,您可能希望将某种类型的页面blob租约作为互斥锁,以确保您仅从一个实例进行轮询)。您也可以通过Azure队列执行此操作,因为队列消息现在支持在创建消息时的隐身超时。

答案 5 :(得分:0)

azure存储分析是否包含所需信息?你仍然需要做一些事情来进行投票。

答案 6 :(得分:0)

旧问题,但是我正在研究此主题,发现您现在可以使用Azure Event Grid(不要与Azure Event Hubs 混淆)来在发生Blob存储更改时得到通知:

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