7

我想按需处理数百万条记录,这大约需要 2-3 个小时来处理。我想去无服务器,这就是为什么尝试持久功能(第一次)。我想检查一下,我可以运行持久功能多长时间,所以我创建了 3 个功能

  1. 用于启动 Orchestrator 功能的 Http 函数
  2. 编排器功能 在此处输入图像描述
  3. 活动功能

在此处输入图像描述

我的 DurableFunction 正在 Application Insights 中运行并发出过去 5 天的日志,根据我的代码,它还需要 15 天才能完成。

我想知道如何手动停止 Orchestrator 功能?

我可以在 ApplicationInsights 请求表中看到数千个条目用于单次执行,有没有办法检查后端运行了多少 DurableFunction?单次执行需要多少时间?

我可以在“DurableFunctionHubInstance”表中看到有关编排器功能的一些信息,但 MS 建议不要依赖表。

4

2 回答 2

12

由于 Durable Functions 会执行大量检查点并重放编排,因此正常的日志记录可能并不总是很有洞察力。

获取状态

有几种方法可以查询编排的状态。其中之一是通过George Chen 提到的Azure Functions Core 工具。

另一种查询状态的方法是直接使用 Durable Functions 的 HTTP API:

GET <rooturl>/runtime/webhooks/durableTask/instances?
    taskHub={taskHub}
    &connection={connectionName}
    &code={systemKey}
    &createdTimeFrom={timestamp}
    &createdTimeTo={timestamp}
    &runtimeStatus={runtimeStatus1,runtimeStatus2,...}
    &showInput=[true|false]
    &top={integer}

文档中的更多信息。

HTTP API 还具有清除编排的方法。一个按 ID多个按 datetime/status

DELETE <rooturl>/runtime/webhooks/durabletask/instances/{instanceId}
    ?taskHub={taskHub}
    &connection={connection}
    &code={systemKey}

最后,您还可以使用DurableOrchestrationClientC# 中的 API 管理您的实例。这是 GitHub 上的示例:HttpGetStatusForMany.cs

如果您想了解更多关于如何在 C# 中使用它的信息,我已经写了关于使用 API 的视频并博客。DurableOrchestrationClient

自定义状态

小补充:可以向编排添加自定义状态对象,以便您可以添加有关编排进度的丰富信息。

获取持续时间

当您查询编排实例的状态时,您会返回一个DurableOrchestrationStatus对象。这包含两个属性:

  • 创建时间
  • 上次更新时间

我猜你可以减去这些并得到一个合理的指示它所花费的时间。

于 2019-05-06T12:41:49.753 回答
3

您可以使用Azure Functions Core Tools管理 Durable Functions 编排实例。

终止实例

func durable terminate --id 0ab8c55a66644d68a3a8b220b12d209c --reason "It was time to be done."

使用过滤器查询实例:您可以添加参数(运行时状态)来过滤正在运行的实例。

func durable get-instances --created-after 2018-03-10T13:57:31Z --created-before  2018-03-10T23:59Z --top 15

至于功能所用的时间,看起来它不支持。类似的参数是get-history.

于 2019-05-06T07:38:53.513 回答