我已将队列触发的 Azure Webjobs 迁移到 Azure Functions。根据我的测量,从队列中提取消息的等待时间是函数的 5 倍到 60 倍以上(是的,真的)。
在 Webjob 领域,我观察到使用默认的 BatchSize、NewBatchThreshold 和 MaxPollingInterval,队列等待时间通常在亚秒级。
使用我的函数,我看到队列等待时间通常超过 45-60 秒。队列中的项目数和等待时间之间存在相关性。如果队列中的项目数是低个位数,则等待时间过长,即。60 秒以上。尽管我尝试了许多不同的 BatchSize 和 NewBatchThreshold 组合,但仍然如此。
一些具体细节:
- 网络作业是 .NET Core 3.1
- 函数是 v3 和 .NET Core 3.1
- 我已经尝试过 Consumption Plan 和 App Service 计划中的功能,我发现等待时间没有差异
为了获得一些科学测量,我使用我的函数来记录消息排队的时间以及从队列中检索消息的时间,以便获得经过的时间。为了进一步消除变量,我创建了几个完全空的函数——也就是说,队列触发方法的主体只包含记录时间的代码。我在这里也看到了大量的等待时间。
如果我采用队列触发方法并将它们复制并粘贴到 Azure webjob 中,队列等待时间将变为 1 秒或更短。
有什么指导吗?