【问题标题】:Azure function calling another Azure functionAzure 函数调用另一个 Azure 函数
【发布时间】:2017-10-01 18:02:41
【问题描述】:

我想构建一个 Azure Function 来响应来自另一个 Azure 函数的 HTTP POST 请求,即 MasterFunction 调用 NotificationsFunction

说,我有以下简单的 POCO 对象:

public class Car
{
   public string Make { get; set; }
   public string Model { get; set; }
   public int Year { get; set; }
   public int Mileage { get; set; }
}

两个函数将共享包含这些 POCO 对象的同一个类库。

我是否可以假设在MasterFunction 中,我必须将我的Car 对象序列化为JSON,然后进行HTTP 调用?

谁能给我一些类似场景的代码示例?

【问题讨论】:

标签: azure azure-functions


【解决方案1】:

如果您的两个函数都在同一个 azure 函数应用程序中(我认为是这种情况),我会说调用其他函数的最佳方法是使用队列。

从某种意义上说,您将 POCO 放入队列并使用 QueueTrigger 定义您的第二个函数。因此,一旦一个对象进入队列,就会自动调用另一个函数,并且该对象会出队。

您可以在此处找到示例和更多详细信息:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-queue

【讨论】:

  • 当您可以向其他函数公共 URL 发出直接 HTTP 请求时,为什么要使用 Azure 队列?
  • 因为这是 MS 推荐的做法。并且有一些内置的容错机制。例如,如果第二个函数抛出异常,那么使用队列机制,它会自动重试,并在几次失败后将它们放入单独的队列(称为毒队列),以便您稍后重试。还有另一种机制来负载平衡和并行化每个队列项的函数执行。
  • 一般来说,我会说如果你想以一种火而忘记的方式调用另一个函数,那么队列是最好的选择,但如果你需要等待函数得到结果,这可不是什么好事。
  • 可以通过function.json设置设置毒队列参数(重试次数,...),但避免自动重试最简单的方法是不从第二个函数抛出(吞下异常)并且只是在函数中记录错误)通过其他机制,我的意思是它处理队列触发器的方式。一旦你在队列中有 1000 个项目,一次拿起 16 个项目并触发函数(这个数字可以设置),所以它试图平衡第二个函数的负载,你也可以设置自动缩放规则来缩放根据队列长度退出应用程序。
  • 但是如果你不需要这些东西并且 HttpTrigger 适合你,最好去买它。
【解决方案2】:

如果我理解正确,您希望在服务/端点之间进行服务通信。 您可以使用编排或编排进行服务通信。 使用 1. 持久功能 2. 逻辑应用程序在 azure 中进行编排 使用 1. 存储队列 2. 服务总线在 azure 中编排。

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多