首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无HttpTrigger的Azure持久函数调用(自动启动)

无HttpTrigger的Azure持久函数调用(自动启动)
EN

Stack Overflow用户
提问于 2019-02-10 00:17:42
回答 2查看 1.2K关注 0票数 5

我正在查看这个示例,以便在设置的超时后运行一个持久函数活动。

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

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

但是,在将函数发布到Azure时,我不希望必须通过关联的HTTP触发器手动调用/启动函数。我只想让持久函数自动启动并开始处理。

这个是可能的吗?如果不是,建议的解决方法是什么?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-10 00:55:43

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

以下是我从你的问题中对你的设置的理解:

代码语言:javascript
复制
[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)
{
}

现在,每次部署Function App的新版本时,都需要运行orchestrator。然而,我不认为它可以自己启动。

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

最重要的是,这个解决方案的好处之一是,如果Azure函数没有响应,您可能会使部署失败。

票数 2
EN

Stack Overflow用户

发布于 2020-01-04 00:35:48

这似乎也在起作用。

代码语言:javascript
复制
[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);
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54608103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档