Delen via


Dapr Uitvoerbinding publiceren voor Azure Functions

Met de Dapr-uitvoerbinding kunt u tijdens het uitvoeren van een functie een bericht publiceren naar een Dapr-onderwerp.

Zie het overzicht van de Dapr-extensie voor meer informatie over het instellen en configureren van de Dapr-extensie.

Example

U kunt een C#-functie maken met behulp van een van de volgende C#-modi:

Execution model Description
Geïsoleerd werknemermodel Uw functiecode wordt uitgevoerd in een afzonderlijk .NET-werkproces. Gebruiken met ondersteunde versies van .NET en .NET Framework. Zie Handleiding voor het uitvoeren van C# Azure Functions in het geïsoleerde werkrolmodel voor meer informatie.
In-process model Uw functiecode wordt uitgevoerd in hetzelfde proces als het Functions-hostproces. Ondersteunt alleen LTS-versies (Long Term Support) van .NET. Zie C#-klassebibliotheekfuncties ontwikkelen met behulp van Azure Functions voor meer informatie.

In het volgende voorbeeld ziet u hoe u een Dapr-uitvoerbinding gebruikt om een Dapr-publicatiebewerking uit te voeren naar een pub/subonderdeel en onderwerp.

[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);
}

In het volgende voorbeeld wordt een "TransferEventBetweenTopics" functie gemaakt met behulp van de DaprPublishOutput binding met een 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.");
}

In het volgende voorbeeld wordt de Dapr-uitvoerbinding gekoppeld aan een HTTP-trigger, die is geregistreerd door het app object:

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 };
    }
});

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

{
  "bindings": 
    {
      "type": "daprPublish",
      "direction": "out",
      "name": "pubEvent",
      "pubsubname": "%PubSubName%",
      "topic": "B"
    }
}

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

# 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

In het volgende voorbeeld ziet u een Dapr Publish-uitvoerbinding, die gebruikmaakt van het v2 Python-programmeermodel. Ga als volgt te werk om deze te gebruiken daprPublish in de code van uw Python-functie-app:

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'))

Attributes

In the in-process model, use the DaprPublish to define a Dapr publish output binding, which supports these parameters:

function.json property Description Kan worden verzonden via kenmerk Kan worden verzonden via RequestBody
PubSubName De naam van de Dapr pub/sub om het bericht te verzenden. ✔️ ✔️
Topic De naam van het Dapr-onderwerp om het bericht te verzenden. ✔️ ✔️
Payload Required. Het bericht dat wordt gepubliceerd. ✔️

Annotations

Met de DaprPublishOutput aantekening kunt u een functie toegang hebben tot een gepubliceerd bericht.

Element Description Kan worden verzonden via kenmerk Kan worden verzonden via RequestBody
pubSubName De naam van de Dapr pub/sub om het bericht te verzenden. ✔️ ✔️
topic De naam van het Dapr-onderwerp om het bericht te verzenden. ✔️ ✔️
payload Required. Het bericht dat wordt gepubliceerd. ✔️

Configuration

In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u in de code hebt ingesteld.

Property Description Kan worden verzonden via kenmerk Kan worden verzonden via RequestBody
pubsubname De naam van de onderdeelservice van de uitgever. ✔️ ✔️
topic De naam/id van het uitgeversonderwerp. ✔️ ✔️
payload Required. Het bericht dat wordt gepubliceerd. ✔️

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

function.json property Description Kan worden verzonden via kenmerk Kan worden verzonden via RequestBody
pubsubname De naam van de onderdeelservice van de uitgever. ✔️ ✔️
topic De naam/id van het uitgeversonderwerp. ✔️ ✔️
payload Required. Het bericht dat wordt gepubliceerd. ✔️

In de volgende tabel worden de bindingsconfiguratie-eigenschappen @dapp.dapr_publish_output uitgelegd die u in uw Python-code hebt ingesteld.

Property Description Kan worden verzonden via kenmerk Kan worden verzonden via RequestBody
pub_sub_name De naam van de gebeurtenis van de uitgever. ✔️ ✔️
topic De naam/id van het uitgeveronderwerp. ✔️ ✔️
payload Required. Het bericht dat wordt gepubliceerd. ✔️

Als eigenschappen zijn gedefinieerd in zowel kenmerken als RequestBody, wordt prioriteit gegeven aan gegevens die zijn opgegeven in RequestBody.

See the Example section for complete examples.

Usage

Als u de Dapr-uitvoerbinding wilt gebruiken, begint u met het instellen van een Dapr pub/subonderdeel. Meer informatie over welk onderdeel u moet gebruiken en hoe u dit kunt instellen in de officiële Dapr-documentatie.

Als u het daprPublish project in Python v2 wilt gebruiken, stelt u uw project in met de juiste afhankelijkheden.

  1. Een virtuele omgeving maken en activeren.

  2. Voeg in het requirements.text bestand de volgende regel toe:

    azure-functions==1.18.0b3
    
  3. Installeer de Python-bibliotheek in de terminal.

    pip install -r .\requirements.txt
    
  4. Wijzig uw local.setting.json bestand met de volgende configuratie:

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

Next steps

Meer informatie over publiceren en abonneren op Dapr.