你当前正在访问 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("ConsumeMessageFromKafka")]
public static void Run(
    // Note: the value of BindingName must match the binding name in components/kafka-bindings.yaml
    [DaprBindingTrigger(BindingName = "%KafkaBindingName%")] JObject triggerData,
    ILogger log)
{
    log.LogInformation("Hello from Kafka!");
    log.LogInformation($"Trigger data: {triggerData}");
}

下面是 Dapr 输入绑定触发器的 Java 代码:

@FunctionName("ConsumeMessageFromKafka")
public String run(
        @DaprBindingTrigger(
            bindingName = "%KafkaBindingName%")
)

使用 app 对象注册 daprBindingTrigger

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

app.generic('ConsumeMessageFromKafka', {
    trigger: trigger.generic({
        type: 'daprBindingTrigger',
        bindingName: "%KafkaBindingName%",
        name: "triggerData"
    }),
    handler: async (request, context) => {
        context.log("Node function processed a ConsumeMessageFromKafka request from the Dapr Runtime.");
        context.log(context.triggerMetadata.triggerData)
    }
});

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

daprBindingTrigger 的 function.json 文件如下所示

{
  "bindings": [
    {
      "type": "daprBindingTrigger",
      "bindingName": "%KafkaBindingName%",
      "name": "triggerData",
      "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 (
    $triggerData
)

Write-Host "PowerShell function processed a ConsumeMessageFromKafka request from the Dapr Runtime."

$jsonString = $triggerData | ConvertTo-Json

Write-Host "Trigger data: $jsonString"

以下示例显示了一个 Dapr 输入绑定触发器,该触发器使用 v2 Python 编程模型。 在 Python 函数应用代码中使用 daprBinding

import logging
import json
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="ConsumeMessageFromKafka")
@app.dapr_binding_trigger(arg_name="triggerData", binding_name="%KafkaBindingName%")
def main(triggerData: str) -> None:
    logging.info('Python function processed a ConsumeMessageFromKafka request from the Dapr Runtime.')
    logging.info('Trigger data: ' + triggerData)

属性

进程内模型中,使用 DaprBindingTrigger 触发 Dapr 输入绑定,该绑定支持以下属性。

参数 说明
BindingName Dapr 触发器的名称。 如果未指定,则使用该函数的名称作为触发器名称。

批注

通过 DaprBindingTrigger 批注,可以创建由创建的绑定组件触发的函数。

元素 说明
bindingName Dapr 绑定的名称。

配置

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

properties 说明
bindingName 绑定的名称。

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

“function.json”属性 说明
bindingName 绑定的名称。

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

properties 说明
binding_name 绑定的名称。

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

使用情况

要使用 Dapr 输入绑定触发器,请首先设置 Dapr 输入绑定组件。 可在官方 Dapr 文档中详细了解可使用的组件以及组件的设置方式。

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

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