Azure Functions 的 Azure 队列触发器:配置最小轮询间隔
Posted
技术标签:
【中文标题】Azure Functions 的 Azure 队列触发器:配置最小轮询间隔【英文标题】:Azure Queue trigger for Azure Functions: configure minimum polling interval 【发布时间】:2021-02-05 07:46:24 【问题描述】:我需要处理一个任务队列,我想知道 Azure 队列是否适合我的情况。任务执行意味着查询速率受限的 API,因此我希望每 X 秒进行一次轮询(可以慢,但不能比这更快)。 Azure Function 应用程序将使用并发为 1 的队列消息。
在host.json settingsmaxPollingInterval
中可以配置。对于它说的最小间隔
最小值为 00:00:00.100(100 毫秒)并递增到 00:01:00(1 分钟)
有什么方法可以强制在轮询之间产生所需的延迟?
【问题讨论】:
【参考方案1】:Azure 队列可能无法满足您的需求。这是polling algorithm:
找到消息后,运行时等待两秒钟,然后 检查另一条消息 当没有找到消息时,它会等待大约四秒钟,然后再尝试 再次。 在后续尝试获取队列消息失败后,等待 时间继续增加,直到达到最大等待时间(maxPollingInterval), 默认为一分钟。所以它不会每 X 秒轮询一次队列。
您可以考虑使用timer trigger function,可以指定每X 秒运行一次;在函数内部,你可以编写你的逻辑来调用 api。
【讨论】:
我接受这个答案,因为我可能会这样做。在 Mac 上本地运行计时器功能时遇到了一些问题,但现在是 resolved。将任务传递给计时器函数可能仍涉及 Azure 队列。就整个情况而言,似乎有一种替代解决方案,即使用functionAppScaleLimit=1
设置和批处理限制1 来部署队列触发功能,这将在退出前等待所需的X 秒。计时器触发器虽然更简单,但目前可以满足我的需求。以上是关于Azure Functions 的 Azure 队列触发器:配置最小轮询间隔的主要内容,如果未能解决你的问题,请参考以下文章
AZURE_FUNCTIONS_ENVIRONMENT 与 ASPNETCORE_ENVIRONMENT
Azure Functions - 根据事件类型阻止处理 Azure 服务总线消息
Azure Functions 未在本地创建 Azure 表列