你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Functions 的 Dapr 服务调用触发器

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

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

示例

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

执行模型 说明
独立工作模型 函数代码在单独的 .NET 工作进程中运行。 与受支持的 .NET 和 .NET Framework 版本结合使用。 若要了解详细信息,请参阅开发 .NET 独立工作进程函数
进程模型 函数代码与 Functions 宿主进程在同一进程中运行。 仅支持 .NET 的长期支持 (LTS) 版本。 若要了解详细信息,请参阅开发 .NET 类库函数
[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 代码。

daprServiceInvocationTrigger 的 function.json 文件如下所示

{
  "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"]

以下示例显示了一个 Dapr 服务调用触发器,该触发器使用 v2 Python 编程模型。 在 Python 函数应用代码中使用 daprServiceInvocationTrigger

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 服务调用绑定,该绑定支持以下属性。

参数 说明
MethodName 可选。 Dapr 调用方应使用的方法名称。 如果未指定,则使用该函数的名称作为方法名称。

批注

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

元素 说明
methodName 方法名称。

配置

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

properties 说明
type 必须设置为 daprServiceInvocationTrigger
name 表示函数代码中 Dapr 数据的变量的名称。

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

“function.json”属性 说明
type 必须设置为 daprServiceInvocationTrigger
name 表示函数代码中 Dapr 数据的变量的名称。

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

properties 说明
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 服务调用。