Azure ScheduleNewOrchestrationInstanceAsync - 输入大小

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

我的任务是创建 API Azure 函数以将文件上传到 Blob 存储容器。文件采用base64格式,通过POST方法传递给函数,函数体内部采用json格式,其中包含更多需要上传的重要参数。

简单的工作流程是:

  1. 调用方调用 HTTP 触发器(异步持久功能)。
  2. 函数将安排新的编排实例。
  3. 实例会调用Activity Trigger进行上传

但是当我尝试上传大于 4 Mb 的文件时,出现此错误:

Exception: System.AggregateException: One or more errors occurred. (Status(StatusCode="ResourceExhausted", Detail="Received message larger than max (5876735 vs. 4194304)"))
[2023-07-10T12:41:01.044Z]  ---> Grpc.Core.RpcException: Status(StatusCode="ResourceExhausted", Detail="Received message larger than max (5876735 vs. 4194304)")
[2023-07-10T12:41:01.046Z]    at Microsoft.DurableTask.Client.Grpc.GrpcDurableTaskClient.ScheduleNewOrchestrationInstanceAsync(TaskName orchestratorName, Object input, StartOrchestrationOptions options, CancellationToken cancellation)

更具体地说,这是处理大文件时失败的代码部分:

// Function input comes from the request content.
StartOrchestrationOptions options = new StartOrchestrationOptions {InstanceId = CorreliationId};
instanceId = await client.ScheduleNewOrchestrationInstanceAsync(nameof(UploadFileOrchestrator), requestBody, options);

requestBody是json,里面有文件,所以它是InstanceInput。错误告诉我,Input 数据不能大于 4 Mb。我怎样才能绕过这个问题并增加最大input大小?

我无法找到任何有关orchestrator输入大小的文档。

c# azure azure-durable-functions azure-api-apps
2个回答
1
投票

我相信这是 .NETisolated 的 Durable Functions 内部使用的 gRPC 服务器的默认限制。

您可以使用不应有此限制的进程内模型,或使用

claim 检查模式Durable Functions 通常也使用)来解决此问题。

此外,

在 GitHub 存储库上打开一个错误以解决此问题。


0
投票
我调整了默认值,将其从 4 MB 增加。此修改是在配置函数中的启动文件中进行的。

通常不建议通过这种方式修改默认值。

请参阅此处的文档

public override void Configure(IFunctionsHostBuilder builder) { builder.Services.AddGrpc(option => { option.MaxReceiveMessageSize = 10485760; // 10MB }); }
    
© www.soinside.com 2019 - 2024. All rights reserved.