你当前正在访问 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 类库函数
[FunctionName("StateInputBinding")]
public static IActionResult Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = "state/{key}")] HttpRequest req,
    [DaprState("statestore", Key = "{key}")] string state,
    ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    return new OkObjectResult(state);
}

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

@FunctionName("RetrieveOrder")
public String run(
        @DaprServiceInvocationTrigger(
            methodName = "RetrieveOrder") 
        String payload,
        @DaprStateInput(
            stateStore = "%StateStoreName%",
            key = "order")
        String product,
        final ExecutionContext context)

在以下示例中,Dapr 调用输入绑定添加为 extraInput,与由 app 对象注册的 HTTP 触发器配对:

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

app.generic('StateInputBinding', {
    trigger: trigger.generic({
        type: 'httpTrigger',
        authLevel: 'anonymous',
        methods: ['GET'],
        route: "state/{key}",
        name: "req"
    }),
    extraInputs: [daprStateInput],
    handler: async (request, context) => {
        context.log("Node HTTP trigger function processed a request.");

        const daprStateInputValue = context.extraInputs.get(daprStateInput);
        // print the fetched state value
        context.log(daprStateInputValue);

        return daprStateInputValue;
    }
});

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

daprState 的 function.json 文件如下所示

{
  "bindings": 
    {
      "type": "daprState",
      "direction": "in",
      "key": "order",
      "stateStore": "%StateStoreName%",
      "name": "order"
    }
}

有关 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, $order
)

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

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

Write-Host "$jsonString"

以下示例显示了一个 Dapr 状态输入绑定,该绑定使用 v2 Python 编程模型。 若要在 Python 函数应用代码中使用 daprState 绑定和 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)

属性

进程内模型中,使用 DaprState 将 Dapr 状态读取到函数中,该函数支持以下参数:

参数 说明
StateStore 要检索状态的状态存储的名称。
要从指定状态存储中检索的密钥的名称。

批注

通过 DaprStateInput 注释,可将 Dapr 状态读取到函数中。

元素 说明
stateStore Dapr 状态存储的名称。
状态存储密钥值。

配置

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

properties 说明
stateStore 状态存储的名称。
要从指定状态存储中检索的密钥的名称。

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

“function.json”属性 说明
要从指定状态存储中检索的密钥的名称。
stateStore 状态存储的名称。

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

properties 说明
state_store 状态存储的名称。
密钥值。 要从指定状态存储中检索的密钥的名称。

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

使用情况

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

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

  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 状态管理。