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


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

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

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

Example

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

Execution model Description
Изолированная рабочая модель Код функции выполняется в отдельном рабочем процессе .NET. Используйте поддерживаемые версии .NET и Microsoft .NET Framework. Дополнительные сведения см. в руководстве по запуску функций Azure C# в изолированной рабочей модели.
In-process model Код функции выполняется в том же процессе, что и хост-процесс Функций. Поддерживает только версии .NET с долгосрочной поддержкой (LTS). Дополнительные сведения см. в статье Разработка функций библиотеки классов C# с помощью службы "Функции Azure".
[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 };
    }
});

The following examples show Dapr triggers in a function.json file and PowerShell code that uses those bindings.

Here's the function.json file for daprServiceInvocationTrigger:

{
  "bindings": [
    {
      "type": "daprServiceInvocationTrigger",
      "name": "payload",
      "direction": "in"
    }
  ]
}

For more information about function.json file properties, see the Configuration section.

In code:

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)

Attributes

In the in-process model, use the DaprServiceInvocationTrigger to trigger a Dapr service invocation binding, which supports the following properties.

Parameter Description
MethodName Optional. Имя метода, который должен использовать вызывающий объект Dapr. Если это не указано, имя функции используется в качестве имени метода.

Annotations

Заметка DaprServiceInvocationTrigger позволяет создать функцию, которая вызывается средой выполнения Dapr.

Element Description
methodName Имя метода.

Configuration

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

Property Description
type Необходимо задать значение daprServiceInvocationTrigger.
name Имя переменной, представляющей данные Dapr в коде функции.

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

function.json property Description
type Необходимо задать значение daprServiceInvocationTrigger.
name Имя переменной, представляющей данные Dapr в коде функции.

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

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

See the Example section for complete examples.

Usage

Чтобы использовать триггер вызова службы 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
    

Next steps

Дополнительные сведения о вызове службы Dapr.