Azure函数绑定是按顺序执行的吗?

时间:2017-11-20 09:39:59

标签: azure azure-functions

在给定的Azure Function中,我可以有一个或多个输出绑定。例如,我可能有blob存储输出(将文件blob写入存储)和队列输出(将消息推入队列)。

例如,如果我有这个非常简单的Azure函数(用Node.js编写)......

module.exports = function (context, req) {
    context.log('START: Multi-output function.');

    context.bindings.outputBlob = "blob-contents";
    context.bindings.outputQueueItem = "{'message': 'hello!'}";

    context.done();
};

...在function.json中设置输出绑定,如下所示......

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    },
    {
      "type": "blob",
      "name": "outputBlob",
      "path": "outcontainer/{rand-guid}",
      "connection": "AzureWebJobsDashboard",
      "direction": "out"
    },
    {
      "type": "queue",
      "name": "outputQueueItem",
      "queueName": "outqueue",
      "connection": "AzureWebJobsDashboard",
      "direction": "out"
    }
  ],
  "disabled": false
}

...两个输出绑定实际上是什么时候触发,按什么顺序?

对于问题的时间部分:

  1. 它们会在函数设置输出绑定的位置触发吗? (例如设置context.bindings.outputBlob
  2. 的代码行
  3. 他们在context.done()之后/之后开火吗?
  4. 对于问题的顺序部分:

    1. 他们是按照他们在代码中看到的顺序开火的吗?
    2. 他们是按照他们在function.json
    3. 中看到的顺序开火的

1 个答案:

答案 0 :(得分:2)

在函数执行完成后 - context.done()之后输出绑定。

您在代码中设置它们的顺序对绑定执行没有影响。

如果可以,请将实际执行顺序视为实现细节,不要依赖它。话虽如此,如果我没有弄错,实际的订单将是:

  • function.json
  • 的顺序执行所有非队列绑定
  • 然后,按function.json
  • 的顺序执行所有队列绑定

更新:基于this issuethis issue我得出结论,目前无法保证订单。