如何排队从 blob 触发器收到的请求?

How do I queue up request received from blob trigger?

我有一个函数应用程序,它在上传或更新 blob 时触发。但在我的要求中,我的容器一次可能会收到数千个 blob(客户将 blob 批量上传到容器)。在这种情况下,据我所知,函数应用程序将为容器中的每个 blob 并行 运行。但是我需要排队处理它们。 所以,我想在这里使用队列存储。每当上传 blob 时,让我通过 Blob Triggered Function App 将该 blob 名称作为队列消息添加到队列存储中,然后我将拥有一个队列触发函数应用程序,它将触发并处理队列中的 blob。 如果我的方法有误,请纠正我?另外,我需要知道有什么方法可以从函数应用程序添加队列消息。

你的做法是正确的。我在我的应用程序中做了同样的事情当多个用户在 blob 上上传图像时,我在存储队列中添加了 blob nameurl。您可以创建 Azure 函数来处理队列中的消息,但请确保您的 Azure 函数 batchSize 为 1

Azure 函数存储队列触发器默认批处理大小为 16,它将并行处理 16 条消息。 host.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 是我在存储队列中发送消息的自定义服务

您应该在您的方案中使用 Azure 事件网格 推拉 事件模式,其中存储帐户会将事件直接推送到存储队列订阅者处理程序。

此解决方案不需要任何编码。