Dapr Publicera utdatabindning för Azure Functions
Med Utdatabindningen för Dapr-publicering kan du publicera ett meddelande till ett Dapr-ämne under en funktionskörning.
Information om installation och konfiguration av Dapr-tillägget finns i översikten över Dapr-tillägget.
Exempel
En C#-funktion kan skapas med något av följande C#-lägen:
Körningsmodell | beskrivning |
---|---|
Isolerad arbetsmodell | Funktionskoden körs i en separat .NET-arbetsprocess. Använd med versioner av .NET och .NET Framework som stöds. Mer information finns i Utveckla .NET-isolerade arbetsprocessfunktioner. |
Processmodell | Funktionskoden körs i samma process som Functions-värdprocessen. Stöder endast LTS-versioner (Long Term Support) av .NET. Mer information finns i Utveckla .NET-klassbiblioteksfunktioner. |
I följande exempel visas hur du använder en Dapr-publiceringsutdatabindning för att utföra en Dapr-publiceringsåtgärd till en pub/underkomponent och ett ämne.
[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);
}
I följande exempel skapas en "TransferEventBetweenTopics"
funktion med bindningen DaprPublishOutput
med en DaprTopicTrigger
:
@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.");
}
I följande exempel paras Dapr-publiceringsutdatabindningen ihop med en HTTP-utlösare som registreras av app
objektet:
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 };
}
});
I följande exempel visas Dapr-utlösare i en function.json-fil och PowerShell-kod som använder dessa bindningar.
Här är filen function.json för daprPublish
:
{
"bindings":
{
"type": "daprPublish",
"direction": "out",
"name": "pubEvent",
"pubsubname": "%PubSubName%",
"topic": "B"
}
}
Mer information om function.json filegenskaper finns i avsnittet Konfiguration .
I kod:
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
I följande exempel visas en Dapr Publish-utdatabindning som använder programmeringsmodellen v2 Python. Så här använder daprPublish
du i din Python-funktionsappkod:
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'))
Attribut
I den processbaserade modellen använder du DaprPublish
för att definiera en Dapr-publiceringsutdatabindning, som stöder följande parametrar:
function.json egenskap | beskrivning | Kan skickas via attribut | Kan skickas via RequestBody |
---|---|---|---|
PubSubName | Namnet på Dapr pub/sub för att skicka meddelandet. | ✔️ | ✔️ |
Avsnitt | Namnet på det Dapr-ämne som meddelandet ska skickas till. | ✔️ | ✔️ |
Nyttolast | Obligatoriskt. Meddelandet som publiceras. | ❌ | ✔️ |
Kommentarer
Med anteckningen DaprPublishOutput
kan du ha en funktion som har åtkomst till ett publicerat meddelande.
Element | Description | Kan skickas via attribut | Kan skickas via RequestBody |
---|---|---|---|
pubSubName | Namnet på Dapr pub/sub för att skicka meddelandet. | ✔️ | ✔️ |
Avsnitt | Namnet på det Dapr-ämne som meddelandet ska skickas till. | ✔️ | ✔️ |
Nyttolast | Obligatoriskt. Meddelandet som publiceras. | ❌ | ✔️ |
Konfiguration
I följande tabell förklaras de bindningskonfigurationsegenskaper som du anger i koden.
Property | beskrivning | Kan skickas via attribut | Kan skickas via RequestBody |
---|---|---|---|
pubsubname | Namnet på utgivarkomponenttjänsten. | ✔️ | ✔️ |
Avsnitt | Utgivarens namn/identifierare. | ✔️ | ✔️ |
Nyttolast | Obligatoriskt. Meddelandet som publiceras. | ❌ | ✔️ |
I följande tabell förklaras de bindningskonfigurationsegenskaper som du anger i filen function.json .
function.json egenskap | beskrivning | Kan skickas via attribut | Kan skickas via RequestBody |
---|---|---|---|
pubsubname | Namnet på utgivarkomponenttjänsten. | ✔️ | ✔️ |
Avsnitt | Utgivarens namn/identifierare. | ✔️ | ✔️ |
Nyttolast | Obligatoriskt. Meddelandet som publiceras. | ❌ | ✔️ |
I följande tabell beskrivs bindningskonfigurationsegenskaperna för @dapp.dapr_publish_output
som du anger i Python-koden.
Property | beskrivning | Kan skickas via attribut | Kan skickas via RequestBody |
---|---|---|---|
pub_sub_name | Namnet på utgivarhändelsen. | ✔️ | ✔️ |
Avsnitt | Utgivarens ämnesnamn/identifierare. | ✔️ | ✔️ |
Nyttolast | Obligatoriskt. Meddelandet som publiceras. | ❌ | ✔️ |
Om egenskaper definieras i både Attribut och RequestBody
ges prioritet till data som anges i RequestBody
.
Se avsnittet Exempel för fullständiga exempel.
Användning
Om du vill använda Dapr-publiceringsutdatabindningen börjar du med att konfigurera en Dapr pub/underkomponent. Du kan lära dig mer om vilken komponent som ska användas och hur du konfigurerar den i den officiella Dapr-dokumentationen.
- Dapr pub/underkomponentspecifikationer
- Gör så här: Publicera ett meddelande och prenumerera på ett ämne
Om du vill använda daprPublish
i Python v2 konfigurerar du projektet med rätt beroenden.
requirements.text
Lägg till följande rad i filen:azure-functions==1.18.0b3
Installera Python-biblioteket i terminalen.
pip install -r .\requirements.txt
local.setting.json
Ändra filen med följande konfiguration:"PYTHON_ISOLATE_WORKER_DEPENDENCIES":1