Ausgabebindung für Dapr-Veröffentlichungen für Azure Functions
Mit der Ausgabebindung für Dapr-Veröffentlichungen können Sie eine Nachricht während einer Funktionsausführung in einem Dapr-Thema veröffentlichen.
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. |
Das folgende Beispiel veranschaulicht die Verwendung einer Ausgabebindung für die Dapr-Veröffentlichung zum Ausführen eines Dapr-Veröffentlichungsvorgangs in einer Pub/Sub-Komponente und einem Thema.
[FunctionName("PublishOutputBinding")]
public static void Run(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = "topic/{topicName}")] HttpRequest req,
[DaprPublish(PubSubName = "%PubSubName%", Topic = "{topicName}")] out DaprPubSubEvent pubSubEvent,
ILogger log)
{
string requestBody = new StreamReader(req.Body).ReadToEnd();
pubSubEvent = new DaprPubSubEvent(requestBody);
}
Im folgenden Beispiel wird eine "TransferEventBetweenTopics"
-Funktion mithilfe der DaprPublishOutput
-Bindung und einem DaprTopicTrigger
erstellt:
@FunctionName("TransferEventBetweenTopics")
public String run(
@DaprTopicTrigger(
pubSubName = "%PubSubName%",
topic = "A")
String request,
@DaprPublishOutput(
pubSubName = "%PubSubName%",
topic = "B")
OutputBinding<String> payload,
final ExecutionContext context) throws JsonProcessingException {
context.getLogger().info("Java function processed a TransferEventBetweenTopics request from the Dapr Runtime.");
}
Im folgenden Beispiel wird die Dapr Veröffentlichungs-Ausgabebindung mit einem HTTP-Trigger gekoppelt, der vom app
-Objekt registriert wird:
const { app, trigger } = require('@azure/functions');
app.generic('PublishOutputBinding', {
trigger: trigger.generic({
type: 'httpTrigger',
authLevel: 'anonymous',
methods: ['POST'],
route: "topic/{topicName}",
name: "req"
}),
return: daprPublishOutput,
handler: async (request, context) => {
context.log("Node HTTP trigger function processed a request.");
const payload = await request.text();
context.log(JSON.stringify(payload));
return { payload: payload };
}
});
Die folgenden Beispiele zeigen Dapr-Trigger in der Datei function.json und PowerShell-Code, der diese Bindungen verwendet.
Hier sehen Sie die Datei function.json für daprPublish
:
{
"bindings":
{
"type": "daprPublish",
"direction": "out",
"name": "pubEvent",
"pubsubname": "%PubSubName%",
"topic": "B"
}
}
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
# Example to use Dapr Service Invocation Trigger and Dapr State Output binding to persist a new state into statestore
param (
$subEvent
)
Write-Host "PowerShell function processed a TransferEventBetweenTopics request from the Dapr Runtime."
# Convert the object to a JSON-formatted string with ConvertTo-Json
$jsonString = $subEvent["data"]
$messageFromTopicA = "Transfer from Topic A: $jsonString".Trim()
$publish_output_binding_req_body = @{
"payload" = $messageFromTopicA
}
# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name pubEvent -Value $publish_output_binding_req_body
Das folgende Beispiel zeigt eine Ausgabebindung für die Dapr-Veröffentlichung, die das Python v2-Programmiermodell verwendet. So verwenden Sie daprPublish
in Ihrem Python-Funktions-App-Code
import logging
import json
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="TransferEventBetweenTopics")
@app.dapr_topic_trigger(arg_name="subEvent", pub_sub_name="%PubSubName%", topic="A", route="A")
@app.dapr_publish_output(arg_name="pubEvent", pub_sub_name="%PubSubName%", topic="B")
def main(subEvent, pubEvent: func.Out[bytes]) -> None:
logging.info('Python function processed a TransferEventBetweenTopics request from the Dapr Runtime.')
subEvent_json = json.loads(subEvent)
payload = "Transfer from Topic A: " + str(subEvent_json["data"])
pubEvent.set(json.dumps({"payload": payload}).encode('utf-8'))
Attribute
Verwenden Sie im In-Process-Modell die DaprPublish
, um eine Ausgabebindung für die Dapr-Veröffentlichung zu definieren, die diese Parameter unterstützt:
Eigenschaft von „function.json“ | Beschreibung | Kann per Attribut gesendet werden | Kann im RequestBody gesendet werden |
---|---|---|---|
PubSubName | Der Name des Dapr-Pub/Sub zum Senden der Nachricht. | ✔️ | ✔️ |
Thema | Der Name des Dapr-Themas zum Senden der Nachricht. | ✔️ | ✔️ |
Payload | Erforderlich. Die Nachricht, die veröffentlicht wird. | ❌ | ✔️ |
Anmerkungen
Mit der Anmerkung DaprPublishOutput
können Sie einer Funktion Zugriff auf eine veröffentlichte Nachricht gewähren.
Element | Beschreibung | Kann per Attribut gesendet werden | Kann im RequestBody gesendet werden |
---|---|---|---|
pubSubName | Der Name des Dapr-Pub/Sub zum Senden der Nachricht. | ✔️ | ✔️ |
topic | Der Name des Dapr-Themas zum Senden der Nachricht. | ✔️ | ✔️ |
payload | Erforderlich. Die Nachricht, die veröffentlicht wird. | ❌ | ✔️ |
Konfiguration
Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie im Code festlegen.
Eigenschaft | Beschreibung | Kann per Attribut gesendet werden | Kann im RequestBody gesendet werden |
---|---|---|---|
pubsubname | Der Name des Herausgeberkomponentendiensts. | ✔️ | ✔️ |
topic | Der Name/Bezeichner des Herausgeberthemas. | ✔️ | ✔️ |
payload | Erforderlich. Die Nachricht, die veröffentlicht wird. | ❌ | ✔️ |
Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie in der Datei function.json festlegen.
function.json-Eigenschaft | Beschreibung | Kann per Attribut gesendet werden | Kann im RequestBody gesendet werden |
---|---|---|---|
pubsubname | Der Name des Herausgeberkomponentendiensts. | ✔️ | ✔️ |
topic | Der Name/Bezeichner des Herausgeberthemas. | ✔️ | ✔️ |
payload | Erforderlich. Die Nachricht, die veröffentlicht wird. | ❌ | ✔️ |
Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften für @dapp.dapr_publish_output
, die Sie im Python-Code festlegen.
Eigenschaft | Beschreibung | Kann per Attribut gesendet werden | Kann im RequestBody gesendet werden |
---|---|---|---|
pub_sub_name | Der Name des Herausgeberereignisses. | ✔️ | ✔️ |
topic | Der Name/Bezeichner des Herausgeberthemas. | ✔️ | ✔️ |
payload | Erforderlich. Die Nachricht, die veröffentlicht wird. | ❌ | ✔️ |
Wenn Eigenschaften sowohl in Attributen als auch in RequestBody
definiert sind, haben die in RequestBody
bereitgestellten Daten höhere Priorität.
Vollständige Beispiele finden Sie im Abschnitt Beispiele.
Verwendung
Um die Ausgabebindung für die Dapr-Veröffentlichung 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 daprPublish
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.