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


Триггер dapr Topic для Функции Azure

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

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

Пример

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

Модель выполнения Description
Изолированная рабочая модель Код функции выполняется в отдельном рабочем процессе .NET. Используйте поддерживаемые версии .NET и платформа .NET Framework. Дополнительные сведения см. в статье "Разработка изолированных рабочих процессов .NET".
Модель внутрипроцессного процесса Код функции выполняется в том же процессе, что и хост-процесс Функций. Поддерживает только долгосрочные версии .NET. Дополнительные сведения см. в статье "Разработка функций библиотеки классов .NET".
[FunctionName("TransferEventBetweenTopics")]
public static void Run(
    [DaprTopicTrigger("%PubSubName%", Topic = "A")] CloudEvent subEvent,
    [DaprPublish(PubSubName = "%PubSubName%", Topic = "B")] out DaprPubSubEvent pubEvent,
    ILogger log)
{
    log.LogInformation("C# function processed a TransferEventBetweenTopics request from the Dapr Runtime.");


    pubEvent = new DaprPubSubEvent("Transfer from Topic A: " + subEvent.Data);
}

Ниже приведен код Java для подписки на раздел с помощью триггера Dapr Topic:

@FunctionName("PrintTopicMessage")
public String run(
        @DaprTopicTrigger(
            pubSubName = "%PubSubName%",
            topic = "B")
        String payload,
        final ExecutionContext context) throws JsonProcessingException {
    Logger logger = context.getLogger();
    logger.info("Java function processed a PrintTopicMessage request from the Dapr Runtime.");

app Используйте объект для регистрации daprTopicTrigger:

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

app.generic('TransferEventBetweenTopics', {
    trigger: trigger.generic({
        type: 'daprTopicTrigger',
        name: "subEvent",
        pubsubname: "%PubSubName%",
        topic: "A"
    }),
    return: daprPublishOutput,
    handler: async (request, context) => {
        context.log("Node function processed a TransferEventBetweenTopics request from the Dapr Runtime.");
        context.log(context.triggerMetadata.subEvent.data);

        return { payload: context.triggerMetadata.subEvent.data };
    }
});

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

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

{
  "bindings": [
    {
      "type": "daprTopicTrigger",
      "pubsubname": "%PubSubName%",
      "topic": "B",
      "name": "subEvent",
      "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 (
    $subEvent
)

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

# Convert the object to a JSON-formatted string with ConvertTo-Json
$jsonString = $subEvent["data"] | ConvertTo-Json -Compress

Write-Host "Topic B received a message: $jsonString"

В следующем примере показан триггер Dapr Topic, использующий модель программирования Python версии 2. Чтобы использовать daprTopicTrigger код приложения-функции Python, выполните следующие действия.

import logging
import json
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="PrintTopicMessage")
@app.dapr_topic_trigger(arg_name="subEvent", pub_sub_name="%PubSubName%", topic="B", route="B")
def main(subEvent) -> None:
    logging.info('Python function processed a PrintTopicMessage request from the Dapr Runtime.')
    subEvent_json = json.loads(subEvent)
    logging.info("Topic B received a message: " + subEvent_json["data"])

Атрибуты

В модели внутрипроцессного процесса используйте DaprTopicTrigger триггер привязки Dapr pub/sub, которая поддерживает следующие свойства.

Параметр Описание
PubSubName Имя паба или дочернего файла Dapr.
Раздел Имя раздела Dapr.

Заметки

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

Элемент Description
pubSubName Имя паба или дочернего файла Dapr.
topic Имя раздела Dapr.

Настройка

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

Свойство Description
pubsubname Имя типа компонента Dapr pub/sub.
topic Имя раздела.

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

Свойство в function.json Description
pubsubname Имя типа компонента Dapr pub/sub.
topic Имя раздела.

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

Свойство Description Можно отправлять с помощью атрибута Может отправляться через RequestBody
pub_sub_name Имя типа компонента подписки Dapr. ✔️
topic Раздел подписки. ✔️

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

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

Чтобы использовать триггер Dapr Topic, начните с настройки компонента Dapr pub/sub. Дополнительные сведения о том, какой компонент следует использовать и как настроить его в официальной документации dapr.

Чтобы использовать daprTopicTrigger 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.