Azure Functions:仅在新 Blob 上触发 Blob

问题描述 投票:0回答:1

我有一个 .NET Azure 函数,它有一个 BlobTrigger,我想在新的 blob 上触发它。我的问题是,该函数不仅会在新添加的 blob 上触发,还会在控制容器azure-webjobs-hosts中没有收据的所有现有 blob 上触发。我已经按照here的建议实现了简单的日期检查,因此只有新的 blob 才能到达代码的处理端。我的容器有数百万行,我认为所有这些行都经过此操作将是一种浪费,即使该函数不对它们执行任何操作。

 public static void Run(
     [BlobTrigger("%SourceContainer%/{name}", Connection= "BlobStorageSource")] Stream myBlob,
     IBinder binder,
     string name, BlobProperties properties, ILogger _logger)
 {
     _logger.LogInformation($"Started to process a blob with\n Name: \"{name}\" \n Size: {myBlob.Length} Bytes");

      var blobCreatedDate = properties.CreatedOn.UtcDateTime;
      var thresholdDate = DateTime.Now.AddMinutes(-1);

      if (DateTime.Compare(blobCreatedDate, thresholdDate) > 0)
      {
            // do some processing
      }
      else
      {
          _logger.LogInformation("Message outside of threshold!");
      }
 }

我发现了这个 GitHub 问题,它确认 Azure 中目前不存在用于 BlobTrigger 的此功能。

我很好奇是否有人遇到类似的问题,以及是否有任何解决方法可以用来实现此功能?

.net azure azure-functions azure-blob-storage azure-blob-trigger
1个回答
0
投票

我建议尝试一下 EventGrid。

文档中有一个很好的例子已经准确解释了您的情况 https://learn.microsoft.com/en-us/azure/azure-functions/functions-event-grid-blob-trigger?pivots=programming-language-csharp

为 Blob Created 事件创建事件订阅,然后创建新的 EventGridTrigger 函数。

基于事件的触发器是 Blob 存储的推荐方式,因为它具有较低的延迟和对存储帐户的调用

© www.soinside.com 2019 - 2024. All rights reserved.