Azure Functions 的 Dapr 服务调用触发器

可以使用以下 Dapr 事件在 Dapr 服务调用上触发 Azure Functions。

若要了解 Dapr 扩展的设置和配置详细信息,请参阅 Dapr 扩展概述

示例:

可以使用以下 C# 模式之一创建 C# 函数:

执行模型 DESCRIPTION
独立工作模型 函数代码在单独的 .NET 工作进程中运行。 与 支持的 .NET 和 .NET Framework 版本一起使用。 若要了解详细信息,请参阅 独立辅助角色模型中运行 C# Azure Functions 的指南
进程内模型 函数代码与 Functions 宿主进程在同一进程中运行。 仅支持 .NET 的长期支持 (LTS) 版本。 若要了解详细信息,请参阅 使用 Azure Functions 开发 C# 类库函数
[FunctionName("CreateNewOrder")]
public static void Run(
    [DaprServiceInvocationTrigger] JObject payload,
    [DaprState("%StateStoreName%", Key = "order")] out JToken order,
    ILogger log)
{
    log.LogInformation("C# function processed a CreateNewOrder request from the Dapr Runtime.");

    // payload must be of the format { "data": { "value": "some value" } }
    order = payload["data"];
}

下面是 Dapr 服务调用触发器的 Java 代码:

@FunctionName("CreateNewOrder")
public String run(
        @DaprServiceInvocationTrigger(
            methodName = "CreateNewOrder") 
)

使用 app 对象注册 daprInvokeOutput

const { app, trigger } = require('@azure/functions');

app.generic('InvokeOutputBinding', {
    trigger: trigger.generic({
        type: 'httpTrigger',
        authLevel: 'anonymous',
        methods: ['POST'],
        route: "invoke/{appId}/{methodName}",
        name: "req"
    }),
    return: daprInvokeOutput,
    handler: async (request, context) => {
        context.log("Node HTTP trigger function processed a request.");

        const payload = await request.text();
        context.log(JSON.stringify(payload));

        return { body: payload };
    }
});

以下示例显示了 function.json 文件中的 Dapr 触发器以及使用这些绑定的 PowerShell 代码。

的 function.json 文件如下所示daprServiceInvocationTrigger

{
  "bindings": [
    {
      "type": "daprServiceInvocationTrigger",
      "name": "payload",
      "direction": "in"
    }
  ]
}

有关 function.json 文件属性的详细信息,请参阅配置部分。

在代码中:

using namespace System
using namespace Microsoft.Azure.WebJobs
using namespace Microsoft.Extensions.Logging
using namespace Microsoft.Azure.WebJobs.Extensions.Dapr
using namespace Newtonsoft.Json.Linq

param (
    $payload
)

# C# function processed a CreateNewOrder request from the Dapr Runtime.
Write-Host "PowerShell function processed a CreateNewOrder request from the Dapr Runtime."

# Payload must be of the format { "data": { "value": "some value" } }

# Convert the object to a JSON-formatted string with ConvertTo-Json
$jsonString = $payload| ConvertTo-Json

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name order -Value $payload["data"]

以下示例演示使用 v2 Python 编程模型的 Dapr 服务调用触发器。 若要在 daprServiceInvocationTrigger Python 函数应用代码中使用,请执行以下作:

import logging
import json
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="RetrieveOrder")
@app.dapr_service_invocation_trigger(arg_name="payload", method_name="RetrieveOrder")
@app.dapr_state_input(arg_name="data", state_store="statestore", key="order")
def main(payload, data: str) :
    # Function should be invoked with this command: dapr invoke --app-id functionapp --method RetrieveOrder  --data '{}'
    logging.info('Python function processed a RetrieveOrder request from the Dapr Runtime.')
    logging.info(data)

特性

进程内模型中,使用 DaprServiceInvocationTrigger 此方法触发 Dapr 服务调用绑定,该绑定支持以下属性。

参数 DESCRIPTION
MethodName 可选。 Dapr 调用方应使用的方法的名称。 如果未指定,函数的名称将用作方法名称。

批注

通过 DaprServiceInvocationTrigger 批注,可以创建由 Dapr 运行时调用的函数。

元素 DESCRIPTION
methodName 方法名称。

配置

下表说明了在代码中设置的绑定配置属性。

资产 DESCRIPTION
类型 必须设置为 daprServiceInvocationTrigger
名字 代表函数代码中 Dapr 数据的变量的名称。

下表解释了在 function.json 文件中设置的绑定配置属性。

“function.json”属性 DESCRIPTION
类型 必须设置为 daprServiceInvocationTrigger
名字 代表函数代码中 Dapr 数据的变量的名称。

下表介绍了在 Python 代码中设置的 @dapp.dapr_service_invocation_trigger 的绑定配置属性。

资产 DESCRIPTION
method_name 表示 Dapr 数据的变量的名称。

有关完整示例,请参阅示例部分

用法

若要使用 Dapr 服务调用触发器,请详细了解要与服务调用触发器一起使用的组件以及如何在官方 Dapr 文档中设置它们。

要在 Python v2 中使用 daprServiceInvocationTrigger,请使用正确的依赖项设置项目。

  1. 创建并激活虚拟环境

  2. requirements.text 文件中添加以下行:

    azure-functions==1.18.0b3
    
  3. 在终端中安装 Python 库。

    pip install -r .\requirements.txt
    
  4. 使用以下配置修改 local.setting.json 文件:

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

后续步骤

详细了解 Dapr 服务调用。