首页 文章

Azure队列触发器 - 在不工作时执行一条消息

提问于
浏览
1

我有一个与队列关联的azure队列触发器,我想确保触发器当时只读取并执行一条消息 . 因此,当消息被执行(成功或不成功)时,它处理下一条消息 .

发生的事情是队列执行一条消息,但它开始执行其他消息 . 我的host.json:

"queues": {
    "maxPollingInterval": 20000,
    "visibilityTimeout": "00:01:00",
    "batchSize": 1,
    "maxDequeueCount": 5,
    "newBatchThreshold": 1
  }

遵循MS链接的说明:

https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-queue#trigger---configuration

“如果要避免在一个队列上收到的消息并行执行,可以将batchSize设置为1”

因此,预计当时只运行一条消息(我正在使用消费计划) .

这很关键,因为我需要确保当时只处理一条消息 .

有什么设置我可以改变吗?

或者队列触发器不是解决此要求的好选择吗?

谢谢!

2 回答

  • 1

    存储队列 does NOT guarantee ordering - 因此,如果需要顺序处理,因为交付顺序很重要,您需要考虑Azure Service Bus并在功能设置(host.json)中设置

    maxConcurrentCalls = 1
    

    即使您通过设置功能应用可以扩展到的最大实例数来执行此操作,仍然无法保证Azure存储队列的排序 .

    WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT = 1
    

    Microsoft文档不是完美的 . 它正在不断更新 .

  • 2

    如果要在函数应用程序中最小化队列触发函数的并行执行,可以将批处理大小设置为1. But this setting eliminates concurrency only so long as your function app runs on a single virtual machine (VM).

    如果每个VM上有多个虚拟机和功能实例,则会为每个虚拟机中运行的每个功能实例处理一条消息 .

    This microsoft文档解释了触发器的并发性 .

相关问题