gpt4 book ai didi

c# - 限制服务总线消息接收的 Azure Functions 速率

转载 作者:行者123 更新时间:2023-12-03 16:49:14 27 4
gpt4 key购买 nike

假设我们有以下场景:

  • 包含 10,000 条消息的服务总线队列
  • Azure Functions(使用计划),其中函数设置为 SB 队列的触发器
  • 外部(不受我们控制)系统无法超过特定请求率

如果我尽快对这 10k 消息进行排队,外部系统将无法处理并发负载。我不知道 Azure 同时运行多少个函数实例或应用服务实例(“横向扩展”)来处理这些消息。

这是我的函数定义的代码示例:

public class MyQueueProcessor
{
private IMyDependency MyDependency { get; }

public MyQueueProcessor(IMyDependency myDependency)
{
MyDependency = myDependency;
}

[FunctionName(nameof(MyQueueProcessor))]
public async Task Run([ServiceBusTrigger("my-queue-name", Connection = "MyQueueConnection")] string item, ILogger log)
{
var req = JsonConvert.DeserializeObject<MyQueueRequest>(item);

log.LogInformation($"Beginning processing of " + req);

// Valudate req
// Call external service REST API
await MyDependency.CallService(req, new { otherParameters = true });

log.LogInformation($"Finished processing of " + req);
}
}

我无法使用单个函数处理所有 10k 消息,因为外部服务调用需要数秒才能完成(5-10 秒),并且使用一个函数调用处理所有这些消息将超过 10 分钟的最大值函数调用。

如何限制正在运行的消耗队列中消息的并发函数的数量?

最佳答案

您现在可以通过 Azure 门户中“横向扩展”菜单下的“强制横向扩展限制”来限制实例数量在您的 Azure Function 应用程序上。关闭后,消耗计划的限制将默认为 200 个实例。

请注意,当您使用服务总线绑定(bind)时,每个实例还可以同时接收和处理消息。您可以通过在 host.json 中设置 maxConcurrentCalls 来限制这一点。默认值为 16。

{
"version": "2.0",
"extensions": {
"serviceBus": {
"messageHandlerOptions": {
"autoComplete": true,
"maxAutoRenewDuration": "00:05:00",
"maxConcurrentCalls": 16
}
}
}
}

并发处理的最大消息数将为实例数乘以 maxConcurrentCalls

关于c# - 限制服务总线消息接收的 Azure Functions 速率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61231796/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com