我有一个函数应用程序,它在上传或更新 blob 时触发。但在我的要求中,我的容器一次可能会收到数千个 blob(客户将批量上传 blob 到容器)。在这种情况下,据我所知,函数应用程序将为容器中的每个 blob 并行运行。但我需要在队列中处理它们。所以,我想在这里使用队列存储。每当上传 Blob 时,让我通过 Blob 触发函数应用程序将该 Blob 名称作为队列消息添加到队列存储,然后我将拥有一个队列触发函数应用程序,它将触发和处理队列中的 Blob。如果我的方法有误,请纠正我?另外,我需要知道有没有办法从函数应用程序中添加队列消息。
问问题
847 次
2 回答
1
您应该在您的场景中使用 Azure 事件网格推拉事件模式,其中存储帐户会将事件直接推送到存储队列订阅者处理程序。
该解决方案不需要任何编码。
于 2020-03-30T11:09:22.710 回答
1
你的方法是正确的。我在我的应用程序中做了同样的事情当多个用户在 blob 上上传图像时,我添加了 blobname
和url
存储队列。您可以创建 Azure 函数来处理来自队列的消息,但请确保您的 Azure 函数batchSize
为 1
Azure 函数存储队列触发器默认批量大小为 16,它将并行处理 16 条消息。主机.json
用于在队列中创建新实体和上传实体详细信息的示例API 代码。
await this.adRepository.AddEntity(ad);
var adDto = this.mapper.Map<AzureSearchServiceDto>(ad);
//Push data in Queue
await this.storageService.PushMessageIntoQueue(AppConstraint.ImageVerificationQueue, adDto .ToJson());
功能 验证图像和创建缩略图
[FunctionName("ImageVerificationFunction")]
public async Task Run([QueueTrigger("%ImageVerificationQueue%", Connection = "StorageConnection")]string message, ILogger log)
{
log.LogInformation($"ImageVerificationFunction processed: {message}");
var azureSearchServiceDto = JsonConvert.DeserializeObject<AzureSearchServiceDto>(message);
await this.imageVerificationService.Verify(azureSearchServiceDto);
}
storageService
是我在存储队列中发送消息的自定义服务
于 2020-03-30T10:40:15.883 回答