我有一个 .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 的此功能。
我很好奇是否有人遇到类似的问题,以及是否有任何解决方法可以用来实现此功能?
我建议尝试一下 EventGrid。
文档中有一个很好的例子已经准确解释了您的情况 https://learn.microsoft.com/en-us/azure/azure-functions/functions-event-grid-blob-trigger?pivots=programming-language-csharp
为 Blob Created 事件创建事件订阅,然后创建新的 EventGridTrigger 函数。
基于事件的触发器是 Blob 存储的推荐方式,因为它具有较低的延迟和对存储帐户的调用