gpt4 book ai didi

azure - 如何通过定时器触发调用Durable函数?

转载 作者:行者123 更新时间:2023-12-04 17:31:06 25 4
gpt4 key购买 nike

我是持久功能(编排功能)的新手,并且根据 Microsoft 文档查看了示例应用程序。所以我没有什么疑问。

示例:

public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, methods: "post",
Route = "orchestrators/{functionName}")] HttpRequestMessage req,
[OrchestrationClient] DurableOrchestrationClient starter,
string functionName,
TraceWriter log)
{
// Function input comes from the request content.
dynamic eventData = await req.Content.ReadAsAsync<object>();
string instanceId = await starter.StartNewAsync(functionName, eventData);

log.Info($"Started orchestration with ID = '{instanceId}'.");

return starter.CreateCheckStatusResponse(req, instanceId);
}

为了调用它,我使用 postman 发出了 HTTP POST 请求,因此请求已成功处理,但是当我配置了不同的动词(例如 HTTP GET)时,它在控制台中响应为“NotFound”错误,并且使用来自浏览器的 http 请求向其发出的请求响应为“控制台中出现“NotFound”错误。为什么会发生这种情况?

我可以使用定时器触发器azure函数调用任何Orchestration函数吗?

如果不是为什么?

更新:

有关问题的一些其他详细信息

    [FunctionName("TimerTrigger")]
public static async Task Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, TraceWriter log)
{//this runs for every 5minutes
using (HttpClient client = new HttpClient())
{
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("", "")
});
//making request to above function by http trigger
var result = await client.PostAsync("http://localhost:7071/orchestrators/E1_HelloSequence", content);
}
log.Info($"C# Timer trigger function executed at: {DateTime.Now}");
return;
}

我可以通过计时器触发向http触发器发出请求吗?为什么因为我的持久函数有长时间运行的过程,所以如果在计时器触发器本身中调用编排函数,那么可能有计时器触发超时的可能性,这就是为什么我尝试遵循这种方法.上面的代码可以调用吗?

最佳答案

这是一般的 Azure Functions 行为。 GET 不起作用的原因是示例中的函数仅配置为与 POST 一起使用。请参阅函数签名中的 [HttpTrigger] 属性:

[HttpTrigger(AuthorizationLevel.Anonymous, methods: "post", 
Route = "orchestrators/{functionName}")]

如果您想支持 GET,则相应地更改 methods 参数:

[HttpTrigger(AuthorizationLevel.Anonymous, methods: "get", 
Route = "orchestrators/{functionName}")]

请注意,Visual Studio 似乎存在缓存错误,在本地调试时,无法正确保存对路由信息所做的更改。我打开了一个 GitHub 问题来跟踪这里:https://github.com/Azure/Azure-Functions/issues/552

有关 HTTP 触发器的更多信息,请参阅此文档:https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-http-webhook

如果您想使用计时器触发器来触发持久功能,则只需更改触发器类型即可。例如:

[FunctionName("ScheduledStart")]
public static async Task RunScheduled(
[TimerTrigger("0 0 * * * *")] TimerInfo timerInfo,
[OrchestrationClient] DurableOrchestrationClient starter,
TraceWriter log)
{
string functionName = "E1_HelloSequence";
string instanceId = await starter.StartNewAsync(functionName, null);
log.Info($"Started orchestration with ID = '{instanceId}'.");
}

编辑:如果您使用 Durable v2.x,则语法如下所示:

[FunctionName("ScheduledStart")]
public static async Task RunScheduled(
[TimerTrigger("0 0 * * * *")] TimerInfo timerInfo,
[DurableClient] IDurableClient starter,
ILogger log)
{
string functionName = "E1_HelloSequence";
string instanceId = await starter.StartNewAsync(functionName, null);
log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
}

有关计时器触发器的更多信息,请参阅此文档:https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-timer

关于azure - 如何通过定时器触发调用Durable函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46791815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com