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

Azure Functions 的 Dapr 绑定输出绑定

Dapr 输出绑定可在函数执行期间将值发送到 Dapr 输出绑定。

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

示例

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

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

以下示例演示了如何使用 Dapr 服务调用触发器和 Dapr 输出绑定来读取和处理绑定请求。

[FunctionName("SendMessageToKafka")]
public static async Task Run(
    [DaprServiceInvocationTrigger] JObject payload,
    [DaprBinding(BindingName = "%KafkaBindingName%", Operation = "create")] IAsyncCollector<object> messages,
    ILogger log)
{
    log.LogInformation("C#  function processed a SendMessageToKafka request.");
    await messages.AddAsync(payload);
}

以下示例使用 DaprBindingOutput 绑定和 DaprServiceInvocationTrigger 创建一个 "SendMessagetoKafka" 函数:

@FunctionName("SendMessageToKafka")
public String run(
        @DaprServiceInvocationTrigger(
            methodName = "SendMessageToKafka") 
        String payload,
        @DaprBindingOutput(
            bindingName = "%KafkaBindingName%", 
            operation = "create")
        OutputBinding<String> product,
        final ExecutionContext context) {
    context.getLogger().info("Java  function processed a SendMessageToKafka request.");
    product.setValue(payload);

    return payload;
}

在以下示例中,Dapr 输出绑定与由 app 对象注册的 Dapr 调用输出触发器配对:

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

app.generic('SendMessageToKafka', {
    trigger: trigger.generic({
        type: 'daprServiceInvocationTrigger',
        name: "payload"
    }),
    return: daprBindingOuput,
    handler: async (request, context) => {
        context.log("Node function processed a SendMessageToKafka request from the Dapr Runtime.");
        context.log(context.triggerMetadata.payload)

        return { "data": context.triggerMetadata.payload };
    }
});

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

daprBinding 的 function.json 文件如下所示

{
  "bindings": 
    {
      "type": "daprBinding",
      "direction": "out",
      "bindingName": "%KafkaBindingName%",
      "operation": "create",
      "name": "messages"
    }
}

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

在代码中:

using namespace System.Net

# Input bindings are passed in via param block.
param($req, $TriggerMetadata)

Write-Host "Powershell SendMessageToKafka processed a request."

$invoke_output_binding_req_body = @{
    "data" = $req
}

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name messages -Value $invoke_output_binding_req_body

以下示例显示了一个 Dapr 绑定输出绑定,该绑定使用 v2 Python 编程模型。 在 Python 函数应用代码中使用 @dapp.dapr_binding_output

import logging
import json
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="SendMessageToKafka")
@app.dapr_service_invocation_trigger(arg_name="payload", method_name="SendMessageToKafka")
@app.dapr_binding_output(arg_name="messages", binding_name="%KafkaBindingName%", operation="create")
def main(payload: str, messages: func.Out[bytes]) -> None:
    logging.info('Python processed a SendMessageToKafka request from the Dapr Runtime.')
    messages.set(json.dumps({"data": payload}).encode('utf-8'))

属性

进程内模型中,使用 DaprBinding 定义支持以下参数的 Dapr 绑定输出绑定:

参数 说明 可通过 Attribute 发送 可通过 RequestBody 发送
BindingName Dapr 绑定的名称。
操作 配置的绑定操作。
Metadata 元数据命名空间。
数据 必需。 绑定操作的数据。

批注

通过 DaprBindingOutput 批注,可以创建发送输出绑定的函数。

元素 说明 可通过 Attribute 发送 可通过 RequestBody 发送
bindingName Dapr 绑定的名称。
output 配置的绑定操作。
metadata 元数据命名空间。
data 必需。 绑定操作的数据。

配置

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

properties 说明 可通过 Attribute 发送 可通过 RequestBody 发送
bindingName 绑定的名称。
operation 绑定操作。
metadata 元数据命名空间。
data 必需。 绑定操作的数据。

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

“function.json”属性 说明 可通过 Attribute 发送 可通过 RequestBody 发送
bindingName 绑定的名称。
operation 绑定操作。
metadata 元数据命名空间。
data 必需。 绑定操作的数据。

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

properties 说明 可通过 Attribute 发送 可通过 RequestBody 发送
binding_name 绑定事件的名称。
operation 绑定操作名称/标识符。
metadata 元数据命名空间。
data 必需。 绑定操作的数据。

如果属性在 Attributes 和 RequestBody 中定义,则优先于 RequestBody 中提供的数据。

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

使用情况

要使用 Dapr 输出绑定,请先设置 Dapr 输出绑定组件。 可在 Dapr 官方文档中详细了解可使用的组件及其设置方式。

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

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