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


Триггер dapr Topic для функций 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("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 };
    }
});

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 daprTopicTrigger:

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

Attributes

In the in-process model, use the DaprTopicTrigger to trigger a Dapr pub/sub binding, which supports the following properties.

Parameter Description
PubSubName Имя паба или дочернего файла Dapr.
Topic Имя раздела Dapr.

Annotations

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

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

Configuration

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

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

The following table explains the binding configuration properties that you set in the function.json file.

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

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

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

See the Example section for complete examples.

Usage

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

Next steps

Дополнительные сведения о публикации и подписке Dapr.