我在未来项目的原型中使用了耐用的Azure函数。
基本上,我具有由启动Orchestrator的HTTP POST
请求触发的Client Azure功能。然后,协调器决定触发活动。没什么复杂的。
以下是我正在做的事情的一个示例:
[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)
{
// Triggers some serious activity.
await context.CallActivityAsync("ActivityFunction", null);
}
[FunctionName("ActivityFunction")]
public static Task DoAnAwesomeActivity([ActivityTrigger] DurableActivityContext context)
{
// Short & Sweet activity...
// Wait... Where's my logger?
}
协调器和客户端功能都被赋予ILogger
,而活动功能则不被赋予;与stated中的documentation(特定参数或DurableActivityContext
实例)一样,Activity函数仅获得一个参数。而且我不认为声明这些方法的静态类可以在该ILogger
上保留引用。
我知道Activity Function应该执行一项小任务,但是如果出现问题(如果出现问题,它将以适当的值进行记录)的话,我会感到更加自在(它将:))。
问题
活动如何访问ILogger
?
答案 0 :(得分:1)
不可能将多个参数直接传递给活动函数。在这种情况下,建议是传入对象数组或在.NET中使用ValueTuples对象。
您关心的这个restriction是关于我们从Orchestrator传递给Activity Function的参数。这并不意味着我们只能在Activity方法签名中使用一个参数。随时在此处添加ILogger
并根据需要完成您的工作。