gpt4 book ai didi

Azure函数队列触发器被触发两次,两个实例正在运行?

转载 作者:行者123 更新时间:2023-12-05 04:23:51 25 4
gpt4 key购买 nike

我有一个带有队列触发器的 Azure 函数。该函数每次必须按顺序一条一条地处理一条队列消息。这很重要,因为该函数使用外部 OAuth API,对请求新访问和刷新 token 有各种限制。

为了按顺序处理队列,我进行了以下设置:

主机.json

"queues": {
"batchSize": 1,
"newBatchThreshold": 0
}

应用程序设置

FUNCTIONS_WORKER_PROCESS_COUNT = 1
WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT = 1

尽管进行了这些设置,有时该函数仍会被触发多次。不是在我的测试中,我在队列中转储了很多消息,而是在函数运行时。

我深入研究了 Application Insights 日志,发现该函数在白天多次重新启动,并且在重新启动时,有时会启动该函数两次。

例如:

Log

启动了两个实例。我猜这会导致我的队列出现双重触发器。

如何确保该函数被触发一次?

最佳答案

我相信,让同时只执行一条消息变得更加安全的唯一方法是使用 session 。为每条消息提供相同的 sessionId 以保证您期望的行为。请注意,如果您切换到 session ,某些功能(例如死信)的行为会有所不同。

如果适合您的函数应用,您还可以使用 [Singleton] 属性。它也应该有效,但在使用消费计划时可能会产生额外费用。因此,您需要根据您的工作负载验证它如何影响成本。

另请参阅我的其他答案:azure servicebus maxConcurrentCalls totally ignored

关于Azure函数队列触发器被触发两次,两个实例正在运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73636238/

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