共用方式為


Azure Functions 的 Dapr 服務引動排觸發程序

可以使用下列 Dapr 事件,在 Dapr 服務引動上觸發 Azure Functions。

如需 Dapr 延伸模組的安裝和設定詳細資料,請參閱 Dapr 延伸模組概觀

範例

您可以使用下列其中一種 C# 模式來建立 C# 函式:

執行模型 描述
隔離式背景工作模型 您的函數程式碼在個別的 .NET 背景工作處理序中執行。 搭配支援的 .NET 和 .NET Framework 版本使用。 若要深入了解,請參閱開發 .NET 隔離式背景工作處理序函數
同處理序模型 您的函數程式碼執行的處理序與 Functions 主機處理序相同。 僅支援長期支援 (LTS) 的 .NET 版本。 若要深入了解,請參閱開發 .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 程式碼。

以下是 daprServiceInvocationTriggerfunction.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"]

下列範例示範使用 v2 Python 程式設計模型的 Dapr 服務引動觸發程序。 若要在您的 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 方法名稱。

組態

下表說明您在程式碼中設定的繫結設定屬性。

屬性 描述
type 必須設定為 daprServiceInvocationTrigger
name 代表函式程式碼中 Dapr 資料的變數名稱。

下表說明您在 function.json 檔案中設定的繫結設定屬性。

function.json 屬性 描述
type 必須設定為 daprServiceInvocationTrigger
name 代表函式程式碼中 Dapr 資料的變數名稱。

下表說明您在 Python 程式碼中設定的 @dapp.dapr_service_invocation_trigger 繫結組態屬性。

屬性 說明
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 服務叫用。