在调试 azure 持久函数时清除历史记录

use*_*502 6 azure-functions azure-durable-functions

持久函数在存储中保持一个状态,这就是使它们工作的原因,但是在调试和开发时非常麻烦。我有大量未完成的运行,并且系统在我启动该过程时尝试再次运行。一些运行具有相同的错误数据,这会导致异常,而另一些运行由于某些事情没有按预期工作而提前终止。

我不想在调试中启动我的应用程序时运行所有旧案例(针对我的本地存储帐户运行)。如何自动清除所有数据,以便仅触发新功能?

小智 11

您可以使用Azure Core Tools清除编排实例状态。

首先,您需要确保为您的特定 Azure Function 版本安装了 Azure Core Tools。您可以使用 NPM 包管理器来执行此操作。(请注意,这适用于 Azure Functions 版本 - V3。)

npm install -g azure-functions-core-tools@3
Run Code Online (Sandbox Code Playgroud)

然后在 Azure Functions 项目的根目录中打开命令提示符。Azure Core Tools 需要项目中的 host.json 文件来识别您的编排实例。

您可以使用以下命令查看所有可用的操作:

func durable 
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用以下命令清除实例历史记录:

func durable purge-history
Run Code Online (Sandbox Code Playgroud)

  • 出色的!我想补充一点,这对于在清除所有实例之前列出它们也非常有用:“func Durable get-instances”。另外,我无法通过 NPM 安装 Azure Core Tools,我必须下载安装程序。 (4认同)

Lin*_*Toh 5

您可以使用以下方法之一调用PurgeInstanceHistoryAsync方法:

  1. 编排实例ID
[FunctionName("PurgeInstanceHistory")]
public static Task Run(
    [DurableClient] IDurableOrchestrationClient client,
    [ManualTrigger] string instanceId)
{
    return client.PurgeInstanceHistoryAsync(instanceId);
}
Run Code Online (Sandbox Code Playgroud)
  1. 时间间隔
[FunctionName("PurgeInstanceHistory")]
public static Task Run(
    [DurableClient] IDurableOrchestrationClient client,
    [TimerTrigger("0 0 12 * * *")]TimerInfo myTimer)
{
    return client.PurgeInstanceHistoryAsync(
        DateTime.MinValue,
        DateTime.UtcNow.AddDays(-30),  
        new List<OrchestrationStatus>
        {
            OrchestrationStatus.Completed
        });
}
Run Code Online (Sandbox Code Playgroud)

上述代码片段参考:https://learn.microsoft.com/en-gb/azure/azure-functions/durable/durable-functions-instance-management#purge-instance-history


Car*_*omp 5

对于其他人来说,他们想知道到底如何做到这一点。

  1. 安装 Microsoft Azure 存储资源管理器
  2. 添加与 azure 存储的连接,但选择Local storage emulator 项目清单

4. 使用默认值/单击下一步。

此时,在资源管理器中单击本地和附加。单击(模拟器默认端口)(键)-> 表。删除任务拥抱历史表,然后重新启动您的应用程序。

从这一点来看,找到一种以编程方式完成此操作的方法只是开发时间的问题。