有没有办法以编程方式重新启动Azure函数

时间:2019-01-10 11:25:32

标签: azure azure-functions azure-api-management azureportal

我每隔几分钟就会在计时器上运行一次Azure函数,由于外部API,每次运行不同时间后,它将开始失败,并且通过在Azure门户中手动单击重新启动按钮可以解决此问题然后工作又重新开始了。

有没有办法让azure函数重新启动自身或通过Web挂钩或API请求或在计时器上运行从外部重新启动azure函数

我尝试使用Azure的API管理服务,该服务可用于以天蓝色的方式重新启动其他类型的应用程序服务,但事实证明API中没有功能来请求重新启动天蓝色的功能,还调查了Power Shell和您似乎可以重新启动不同的应用程序服务,但不能使用Azure功能

,似乎是同一个问题

我尝试使用API https://docs.microsoft.com/en-us/rest/api/azure/ 示例API请求,您可以在其中列出azure函数中的函数 GET https://management.azure.com/subscriptions/ {subscriptionId} / resourceGroups / {resourceGroupName} /providers/Microsoft.Web/sites/ {name} / functions?api-version = 2016-08-01

但是没有从我研究的内容中重新启动天蓝色功能的功能

基本上,我想重新启动Azure功能,就像我要按下此按钮一样 Azure functions manual stop/start and restart buttons in azure portal

因为在某些情况下,由于外部API我无法控制该作业,因此每次运行时该作业都会进入不良状态,并且手动单击重新启动会使该作业再次运行

3 个答案:

答案 0 :(得分:1)

在事件上调用天蓝色函数的性质。这可能是计时器,触发器或类似HTTP事件的调用。它们本身无法重新启动,即,如果函数抛出异常,则无法找到特定实例并使用开箱即用功能重新运行它。

但是,您可以设计出更可靠的解决方案的方式:

  1. 重播调用该函数的事件(即再次将其启动)
  2. 对于非敏感数据,记录该函数的有效负载并创建另一个可以按需调用以重新运行它的函数。即您创建一个代理以“重新调用”该功能。
  3. 通过实施重试策略来加强代码。参见Polly
  4. 将服务总线添加到您的体系结构中。具有简单的功能,可将呼叫有效负载写入消息总线有效负载。在可能存在不可靠的集成等情况下,还有另一个功能来拾取有效负载并进行更广泛的处理)。这样,如果呼叫失败,您可以放弃和死信失败,以供以后重新处理。
  5. 考虑使用Durable Function Extensions并利用持久模式,这些可以帮助使您的函数代码更健壮并管理状态。

答案 1 :(得分:1)

另一种重新启动功能的方法是使用host.json文件中的“ watchDirectories”设置。如果您的host.json看起来像这样:

{
    "version": "2.0",
    "watchDirectories": [ "Toggle" ]
}

您可以通过在函数中使用以下语句来切换重新启动:

System.IO.File.WriteAllText("D:/home/site/wwwroot/Toggle/restart.conf", DateTime.Now.ToString());     

在查看日志时,该函数会在检测到目录中的文件更改时重新加载:

Watched directory change of type 'Changed' detected for 'D:\home\site\wwwroot\Toggle\restart.conf'  
Host configuration has changed. Signaling restart

答案 2 :(得分:0)

为什么不尝试使用ARM API。由于Azure功能也属于应用程序服务类别,因此有时这可能会有所帮助, https://docs.microsoft.com/en-us/rest/api/appservice/webapps/restart

相关问题