2

我在未来项目的原型中使用了 Durable Azure Function。

基本上,我有一个由启动 Orchestrator 的 HTTPPOST请求触发的客户端 Azure 函数。然后,Orchestrator 决定触发一个 Activity。没什么复杂的。

这是我正在做的一个示例:

[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?
}

Orchestrator 和 Client Functions 都被赋予了一个ILogger但不是 Activity 函数;如文档中所述特定参数或实例),Activity 函数仅获取一个参数。而且我不认为声明这些方法的静态类可以保留对它的引用。DurableActivityContextILogger

我知道活动函数应该执行一项小工作,但如果我能够记录如果出现问题时使用适当的值调用了活动(它会:)),我会更舒服。

问题

Activity 如何访问ILogger

4

1 回答 1

1

不能直接将多个参数传递给活动函数。在这种情况下,建议传入一个对象数组或在 .NET 中使用 ValueTuples 对象。

您关心的这个限制是关于我们从 Orchestrator 传递给 Activity Function 的参数。这并不意味着我们只能在 Activity 方法签名中使用一个参数。随意添加ILogger并根据需要完成您的工作。

于 2019-02-09T17:18:30.603 回答