不使用HttpTrigger的Azure耐用功能调用(自动启动)

时间:2019-02-09 16:17:42

标签: azure azure-functions azure-durable-functions

我正在看这个示例,以在设置的超时后运行持久功能Activity。

https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-eternal-orchestrations

这将允许我的函数活动执行数据处理,然后恰好等待1个小时,然后尝试再次加载。这将永远持续下去。完美。

但是,当将功能发布到Azure时,我不需要通过关联的HTTP触发器手动调用/启动功能。我只希望持久功能自动启动并开始处理。

这可能吗?如果没有,建议如何解决?

谢谢!

2 个答案:

答案 0 :(得分:1)

如评论中所述,一种方法是在您的发布管道中添加新任务。

以下是我对您的设置的了解:

[FunctionName("ClientFunction")]
public static async Task<HttpResponseMessage> OnHttpTriggerAsync([HttpTrigger(AuthorizationLevel.Anonymous, "post")]
            HttpRequestMessage request, [OrchestrationClient] DurableOrchestrationClient starter, ILogger logger)
{
    // Triggers the orchestrator.
    string instanceId = await starter.StartNewAsync("OrchestratorFunction", null);

    return new HttpResponseMessage(HttpStatusCode.OK);
}


[FunctionName("OrchestratorFunction")]
public static async Task DoOrchestrationThingsAsync([OrchestrationTrigger] DurableOrchestrationContext context, ILogger logger)
{
    DateTime deadline = context.CurrentUtcDateTime.Add(TimeSpan.FromHours(1));
    await context.CreateTimer(deadline, CancellationToken.None);

    // Triggers some yout activity.
    await context.CallActivityAsync("ActivityFunction", null);
}

[FunctionName("ActivityFunction")]
public static Task DoAnAwesomeActivity([ActivityTrigger] DurableActivityContext context)
{
}

现在,每次部署功能应用程序的新版本时,都需要运行协调器。但是,我认为它不能单独启动。

我建议的是要有一个简单的bash脚本(使用curl或其他东西),它将在适当的URL上调用ClientFunction

Bash script

最重要的是,此解决方案的优点之一是,如果Azure Function无法响应,则可能使部署失败。

答案 1 :(得分:1)

这似乎也可行。

[FunctionName("AutoStart")]
public static async Task Run([TimerTrigger("*/5 * * * * *", RunOnStartup = true, UseMonitor = false)]TimerInfo myStartTimer, 
    [DurableClient] IDurableClient orchestrationClient, ILogger log)
    {
        string instanceId = await orchestrationClient.StartNewAsync("Start_Orchestrator", null);
    }