Sdílet prostřednictvím


Publikování výstupní vazby Dapr pro Azure Functions

Výstupní vazba publikování Dapr umožňuje publikovat zprávu do tématu Dapr během provádění funkce.

Informace o nastavení a konfiguraci rozšíření Dapr najdete v přehledu rozšíření Dapr.

Example

Funkci jazyka C# je možné vytvořit pomocí jednoho z následujících režimů jazyka C#:

Execution model Description
Izolovaný model pracovního procesu Kód funkce se spouští v samostatném pracovním procesu .NET. Používá se s podporovanými verzemi rozhraní .NET a .NET Framework. Další informace najdete v Příručce pro spouštění funkcí Azure Functions jazyka C# v izolovaném pracovním modelu.
In-process model Kód funkce se spouští ve stejném procesu jako hostitelský proces služby Functions. Podporuje pouze verze dlouhodobé podpory (LTS) rozhraní .NET. Další informace najdete v tématu Vývoj funkcí knihovny tříd jazyka C# pomocí Azure Functions.

Následující příklad ukazuje použití výstupní vazby pro publikování Dapr k provedení operace publikování Dapr do součásti pub/sub a tématu.

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

Následující příklad vytvoří "TransferEventBetweenTopics" funkci pomocí vazby DaprPublishOutput s 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.");
}

V následujícím příkladu se výstupní vazba publikování Dapr spáruje s triggerem HTTP, který je registrován objektem app :

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

Následující příklad ukazuje výstupní vazbu Dapr Publish, která používá programovací model Pythonu v2. daprPublish Použití v kódu aplikace funkcí Pythonu:

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 Lze odeslat prostřednictvím atributu. Lze odeslat přes RequestBody.
PubSubName Název pub/sub dapr pro odeslání zprávy. ✔️ ✔️
Topic Název tématu Dapr pro odeslání zprávy. ✔️ ✔️
Payload Required. Zpráva, která se publikuje. ✔️

Annotations

Poznámka DaprPublishOutput umožňuje, aby funkce měla přístup k publikované zprávě.

Element Description Lze odeslat prostřednictvím atributu. Lze odeslat přes RequestBody.
pubSubName Název pub/sub dapr pro odeslání zprávy. ✔️ ✔️
topic Název tématu Dapr pro odeslání zprávy. ✔️ ✔️
payload Required. Zpráva, která se publikuje. ✔️

Configuration

Následující tabulka vysvětluje vlastnosti konfigurace vazby, které jste nastavili v kódu.

Property Description Lze odeslat prostřednictvím atributu. Lze odeslat přes RequestBody.
pubsubname Název služby komponent vydavatele. ✔️ ✔️
topic Název nebo identifikátor tématu vydavatele. ✔️ ✔️
payload Required. Zpráva, která se publikuje. ✔️

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

function.json property Description Lze odeslat prostřednictvím atributu. Lze odeslat přes RequestBody.
pubsubname Název služby komponent vydavatele. ✔️ ✔️
topic Název nebo identifikátor tématu vydavatele. ✔️ ✔️
payload Required. Zpráva, která se publikuje. ✔️

Následující tabulka vysvětluje vlastnosti konfigurace vazby, @dapp.dapr_publish_output které jste nastavili v kódu Pythonu.

Property Description Lze odeslat prostřednictvím atributu. Lze odeslat přes RequestBody.
pub_sub_name Název události vydavatele. ✔️ ✔️
topic Název nebo identifikátor tématu vydavatele. ✔️ ✔️
payload Required. Zpráva, která se publikuje. ✔️

Pokud jsou vlastnosti definovány v atributech a RequestBody, priorita je udělena datům zadaným v RequestBody.

See the Example section for complete examples.

Usage

Pokud chcete použít výstupní vazbu publikování Dapr, začněte nastavením komponenty Dapr pub/sub. Další informace o tom, kterou komponentu použít a jak ji nastavit, najdete v oficiální dokumentaci k Dapr.

Pokud chcete použít python daprPublish v2, nastavte projekt se správnými závislostmi.

  1. Vytvoření a aktivace virtuálního prostředí

  2. requirements.text Do souboru přidejte následující řádek:

    azure-functions==1.18.0b3
    
  3. V terminálu nainstalujte knihovnu Pythonu.

    pip install -r .\requirements.txt
    
  4. Upravte local.setting.json soubor pomocí následující konfigurace:

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

Next steps

Přečtěte si další informace o publikování a přihlášení k odběru Dapr.