Поделиться через


Триггер вызова службы Dapr для Функции Azure

Функции Azure можно активировать в вызове службы Dapr с помощью следующих событий Dapr.

Сведения о настройке и настройке расширения Dapr см. в обзоре расширения Dapr.

Пример

Функцию C# можно создать с помощью одного из следующих режимов C#:

Модель выполнения Description
Изолированная рабочая модель Код функции выполняется в отдельном рабочем процессе .NET. Используйте поддерживаемые версии .NET и платформа .NET Framework. Дополнительные сведения см. в статье "Разработка изолированных рабочих процессов .NET".
Модель внутрипроцессного процесса Код функции выполняется в том же процессе, что и хост-процесс Функций. Поддерживает только долгосрочные версии .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"];
}

Ниже приведен код Java для триггера вызова службы Dapr:

@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 };
    }
});

В следующих примерах показаны триггеры Dapr в файле function.json и коде PowerShell, использующем эти привязки.

Ниже приведен файл function.json для daprServiceInvocationTrigger:

{
  "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, который использует модель программирования Python версии 2. Чтобы использовать daprServiceInvocationTrigger код приложения-функции Python, выполните следующие действия.

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.

Элемент Description
Methodname Имя метода.

Настройка

В следующей таблице описываются свойства конфигурации привязки, заданные в коде.

Свойство Описание
type Должен иметь значениеdaprServiceInvocationTrigger.
name Имя переменной, представляющей данные Dapr в коде функции.

В следующей таблице описываются свойства конфигурации привязки, которые задаются в файле function.json.

Свойство в function.json Описание
type Должен иметь значениеdaprServiceInvocationTrigger.
name Имя переменной, представляющей данные Dapr в коде функции.

В следующей таблице описываются свойства конфигурации привязки, заданные @dapp.dapr_service_invocation_trigger в коде Python.

Свойство Description
method_name Имя переменной, представляющей данные Dapr.

Подробные примеры см. в разделе Примеры.

Использование

Чтобы использовать триггер вызова службы Dapr, узнайте больше о том, какие компоненты следует использовать с триггером вызова службы и как настроить их в официальной документации dapr.

Чтобы использовать daprServiceInvocationTrigger Python версии 2, настройте проект с правильными зависимостями.

  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.