当前位置: 首页 > 知识库问答 >
问题:

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

吕晟睿
2023-03-14

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

共有2个答案

元俊雅
2023-03-14

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

Azure 函数存储队列触发器 defatult 批量大小为 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);
    }

存储服务是我的自定义服务,用于在存储队列中发送消息

扈高逸
2023-03-14

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

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

 类似资料:
  • 我是Azure Function应用程序中blob触发器的新手,需要一些帮助。我正在努力寻找有关如何重命名触发该函数的blob的资源。 我有一个函数应用程序,当一个新的blob被上传到容器时触发,文件被处理,我需要一种方法来将其“标记”为已处理,因此我想重命名blob。 这是我的职责: 我该如何重命名该文件?在这种情况下有可能吗?

  • 我想从php发送post请求到python并得到答案,我写了这个脚本发送post 我使用定制python服务器

  • 我有一个azure函数,由上传到特定容器的任何新blob(图像)触发。这些图像然后被存储在这个blob存储容器中。现在我改变了我的函数并重新部署它,我希望我的azure函数能够在所有这些(已经存储的)图像上重新运行。由于该功能是blob触发的,现在我只是手动重新上传存储容器中的相同图像,但随着图像数据的增加,这样做变得越来越不可行。 函数中的Blob触发器如下所示: 它的解决方案是什么? 谢谢你。

  • 问题内容: 我有两个Web应用程序,分别是web1和web2。我想将请求从web1 / servlet1转发到web2 / servlet2。可能吗?请帮忙! 问题答案: 这是一个两步过程: 掌握代表 获得从对应 因此,从内部开始是这样的: 所有这些都有一个很大的警告- 容器可能未配置为允许跨上下文转发,因为这存在潜在的安全风险。如果是这种情况,将返回。

  • 问题内容: 该脚本每5秒重新加载或刷新页面一次。但是我想使用jQuery和AJAX调用来做到这一点。可能吗? 问题答案: 正如其他人指出的那样,setInterval和setTimeout可以解决问题。我想强调一点我从Paul Irish的精彩视频中学到的更先进的技术:http : //paulirish.com/2010/10-things-i-learned-from-the- jquery-

  • 如果你使用blob存储触发器阅读Azure WebJobs上的留档,它们会提到这不是很可靠: WebJobs SDK扫描日志文件以查看新的或更改的blob。这个过程不是实时的;在创建blob后的几分钟或更长时间内,函数可能不会被触发。此外,存储日志是在“尽力而为”的基础上创建的;无法保证所有事件都将被捕获。在某些情况下,日志可能会丢失。如果您的应用程序无法接受blob触发器的速度和可靠性限制,建议