Teilen über


Dapr-Thementrigger für Azure-Funktionen

Azure Functions können mit den folgenden Dapr-Ereignissen in einem Dapr-Themenabonnement ausgelöst werden.

Informationen zu Setup- und Konfigurationsdetails der Dapr-Erweiterung finden Sie in der Dapr-Erweiterungsübersicht.

Example

Eine C#-Funktion kann mit einem der folgenden C#-Modi erstellt werden:

Execution model Description
Isoliertes Workermodell Ihr Funktionscode wird in einem separaten .NET-Workerprozess ausgeführt. Verwenden Sie dazu unterstützte Versionen von .NET und .NET Framework. Weitere Informationen finden Sie im Handbuch zum Ausführen von C#-Azure-Funktionen im isolierten Arbeitsmodell.
In-process model Ihr Funktionscode wird im gleichen Prozess wie der Functions-Hostprozess ausgeführt. Unterstützt nur LTS-Versionen (Long Term Support) von .NET. Weitere Informationen finden Sie unter Entwickeln von C#-Klassenbibliotheksfunktionen mithilfe von Azure Functions.
[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);
}

Im Folgenden finden Sie den Java-Code zum Abonnieren eines Themas mithilfe des Dapr Topic-Triggers:

@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.");

Verwenden Sie das app Objekt, um folgendes daprTopicTriggerzu registrieren:

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"

Das folgende Beispiel zeigt einen Dapr Topic-Trigger, der das v2 Python-Programmiermodell verwendet. So verwenden Sie den daprTopicTrigger In-Python-Funktions-App-Code:

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 Der Name des Dapr pub/sub.
Topic Der Name des Themas "Dapr".

Annotations

Mit der DaprTopicTrigger Anmerkung können Sie eine Funktion erstellen, die ausgeführt wird, wenn ein Thema empfangen wird.

Element Description
pubSubName Der Name des Dapr pub/sub.
topic Der Name des Themas "Dapr".

Configuration

Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie im Code festlegen.

Property Description
pubsubname Der Name des Dapr pub/sub component type.
topic Name des Themas.

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

function.json property Description
pubsubname Der Name des Dapr pub/sub component type.
topic Name des Themas.

Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften für @dapp.dapr_topic_trigger, die Sie im Python-Code festlegen.

Property Description Kann per Attribut gesendet werden Kann über RequestBody gesendet werden
pub_sub_name Der Name des Dapr-Abonnementkomponententyps. ✔️
topic Das Abonnementthema. ✔️

See the Example section for complete examples.

Usage

Um einen Dapr Topic-Trigger zu verwenden, richten Sie zunächst eine Dapr pub/sub-Komponente ein. In der offiziellen Dapr-Dokumentation erfahren Sie mehr darüber, welche Komponente Sie verwenden sollten und wie Sie diese einrichten können.

Um daprTopicTrigger in Python v2 zu verwenden, richten Sie Ihr Projekt mit den richtigen Abhängigkeiten ein.

  1. Erstellen und Aktivieren einer virtuellen Umgebung

  2. Fügen Sie in Ihrer requirements.text-Datei die folgende Zeile hinzu:

    azure-functions==1.18.0b3
    
  3. Installieren Sie im Terminal die Python-Bibliothek.

    pip install -r .\requirements.txt
    
  4. Ändern Sie ihre local.setting.json-Datei mit der folgenden Konfiguration:

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

Next steps

Weitere Informationen zum Veröffentlichen und Abonnieren von Dapr.