Dapr-Thementrigger für Azure Functions
Azure Functions kann mithilfe der folgenden Dapr-Ereignisse für ein Dapr-Themenabonnement ausgelöst werden.
Informationen zu Setup- und Konfigurationsdetails der Dapr-Erweiterung finden Sie in der Dapr-Erweiterungsübersicht.
Beispiel
Eine C#-Funktion kann mit einem der folgenden C#-Modi erstellt werden:
Ausführungsmodell | Beschreibung |
---|---|
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 unter Entwickeln von isolierten .NET-Workerprozessfunktionen. |
In-Process-Modell | 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 .NET-Klassenbibliotheksfunktionen. |
[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-Thementriggers:
@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 die daprTopicTrigger
zu 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 };
}
});
Die folgenden Beispiele zeigen Dapr-Trigger in einer Datei function.json und PowerShell-Code, der diese Bindungen verwendet.
Hier sehen Sie die Datei function.json für daprTopicTrigger
:
{
"bindings": [
{
"type": "daprTopicTrigger",
"pubsubname": "%PubSubName%",
"topic": "B",
"name": "subEvent",
"direction": "in"
}
]
}
Weitere Informationen zu den Dateieigenschaften von function.json finden Sie im Abschnitt Konfiguration.
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-Thementrigger, der das Python v2-Programmiermodell verwendet. So verwenden Sie den daprTopicTrigger
in Ihrem 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"])
Attribute
Verwenden Sie im In-Process-Modell den DaprTopicTrigger
, um eine Dapr-Pub/Sub-Bindung auszulösen, die die folgenden Eigenschaften unterstützt.
Parameter | Beschreibung |
---|---|
PubSubName | Der Name des Dapr-Pub/Sub. |
Thema | Der Name des Dapr-Themas. |
Anmerkungen
Mit der DaprTopicTrigger
-Anmerkung können Sie eine Funktion erstellen, die ausgeführt wird, wenn ein Thema empfangen wird.
Element | Beschreibung |
---|---|
pubSubName | Der Name des Dapr-Pub/Sub. |
topic | Der Name des Dapr-Themas. |
Konfiguration
Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie im Code festlegen.
Eigenschaft | Beschreibung |
---|---|
pubsubname | Der Name des Dapr-Pub/Sub-Komponententyps. |
topic | Name des Themas. |
Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie in der Datei function.json festlegen.
function.json-Eigenschaft | Beschreibung |
---|---|
pubsubname | Der Name des Dapr-Pub/Sub-Komponententyps. |
topic | Name des Themas. |
Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften für @dapp.dapr_topic_trigger
, die Sie im Python-Code festlegen.
Eigenschaft | Beschreibung | Kann per Attribut gesendet werden | Kann im RequestBody gesendet werden |
---|---|---|---|
pub_sub_name | Der Name des Dapr-Abonnementkomponententyps. | ✔️ | ❌ |
topic | Das Abonnementthema. | ✔️ | ❌ |
Vollständige Beispiele finden Sie im Abschnitt Beispiele.
Verwendung
Um einen Dapr-Thementrigger 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.
- Spezifikation der Dapr-Pub/Sub-Komponente
- Veröffentlichen einer Nachricht und Abonnieren eines Themas
Um daprTopicTrigger
in Python v2 zu verwenden, richten Sie Ihr Projekt mit den richtigen Abhängigkeiten ein.
Fügen Sie in Ihrer
requirements.text
-Datei die folgende Zeile hinzu:azure-functions==1.18.0b3
Installieren Sie im Terminal die Python-Bibliothek.
pip install -r .\requirements.txt
Ändern Sie Ihre Datei
local.setting.json
mit der folgenden Konfiguration:"PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
Nächste Schritte
Erfahren Sie mehr über das Veröffentlichen und Abonnieren mit Dapr.