如何检查 运行 状态并停止持久功能

How to check running status and stop Durable function

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

  1. 用于启动 Orchestrator 功能的 Http 函数
  2. 协调器功能
  3. Activity函数

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

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

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

我可以在 "DurableFunctionHubInstance" table 中看到一些关于 orchestrator 功能的信息,但 MS 建议不要依赖 table。

您可以使用 Azure Functions Core Tools 管理 Durable Functions 业务流程实例。

Terminate instances:

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

Query instances with filters: 你可以添加参数(runtime-status)来过滤运行个实例。

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

至于函数耗时,貌似不支持。类似的参数是get-history.

由于 Durable Functions 做了很多 checkpointing and replays the orchestration,正常的日志记录可能并不总是很有见地。

获取状态

查询编排状态的方法有多种。其中之一是通过 George Chen 提到的 Azure Functions Core tools

另一种查询状态的方法是直接使用 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}

docs 中的更多信息。

HTTP API 也有清除编排的方法。 single one by ID or multiple by datetime/status.

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

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

我有 written & vlogged 关于使用 DurableOrchestrationClient API 的信息,如果您想了解更多有关如何在 C# 中使用它的信息。

自定义状态

小补充:可以向编排添加 custom status object,这样您就可以添加有关编排进度的丰富信息。

获取时长

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

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

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