Liaison de sortie Dapr Publish pour Azure Functions
La liaison de sortie de publication Dapr vous permet de publier un message dans une rubrique Dapr pendant l’exécution d’une fonction.
Pour plus d’informations sur l’installation et la configuration de l’extension Dapr, consultez la vue d’ensemble de l’extension Dapr.
Exemple
Une fonction C# peut être créée à l’aide de l’un des modes C# suivants :
Modèle d’exécution | Description |
---|---|
Modèle de worker isolé | Le code de votre fonction s’exécute dans un processus Worker .NET distinct. Utilisez avec les versions prises en charge de .NET et .NET Framework. Pour plus d’informations, consultez Développer les fonctions de processus Worker isolé .NET. |
Modèle in-process | Le code de votre fonction s’exécute dans le même processus que le processus hôte Functions. Prend uniquement en charge les versions LTS (Long Term Support) de .NET. Pour plus d’informations, consultez Développer des fonctions de bibliothèque de classes .NET. |
L'exemple suivant illustre l'utilisation d'une liaison de sortie de publication Dapr pour effectuer une opération de publication Dapr vers un composant et une rubrique publication ou abonnement.
[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);
}
L’exemple suivant crée une fonction "TransferEventBetweenTopics"
à l’aide de la liaison DaprPublishOutput
avec un 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.");
}
Dans l’exemple suivant, la liaison de sortie de publication Dapr est associée à un déclencheur HTTP, qui est inscrit par l’objet 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 };
}
});
Les exemples suivants montrent les déclencheurs Dapr dans un fichier function.json et le code PowerShell qui utilise ces liaisons.
Voici le fichier function.json pour daprPublish
:
{
"bindings":
{
"type": "daprPublish",
"direction": "out",
"name": "pubEvent",
"pubsubname": "%PubSubName%",
"topic": "B"
}
}
Pour plus d’informations sur les propriétés du fichier function.json, consultez la section Configuration.
Dans le 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
L’exemple suivant montre une liaison de sortie Dapr Publish, qui utilise le modèle de programmation Python v2. Pour utiliser daprPublish
dans le code de votre application de fonction Python :
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'))
Attributs
Dans le modèle in-process, utilisez le DaprPublish
pour définir une liaison de sortie de publication Dapr, qui prend en charge ces paramètres :
Propriété function.json | Description | Peut être envoyé via l’attribut | Peut être envoyé via RequestBody |
---|---|---|---|
PubSubName | Nom de la publication ou abonnement Dapr à envoyer le message. | ✔️ | ✔️ |
Rubrique | Nom de la rubrique Dapr à envoyer le message. | ✔️ | ✔️ |
Charge utile | Obligatoire. Message en cours de publication. | ❌ | ✔️ |
Annotations
L’annotation DaprPublishOutput
vous permet d’accéder à une fonction à un message publié.
Élément | Description | Peut être envoyé via l’attribut | Peut être envoyé via RequestBody |
---|---|---|---|
pubSubName | Nom de la publication ou abonnement Dapr à envoyer le message. | ✔️ | ✔️ |
topic | Nom de la rubrique Dapr à envoyer le message. | ✔️ | ✔️ |
payload | Obligatoire. Message en cours de publication. | ❌ | ✔️ |
Configuration
Le tableau suivant décrit les propriétés de configuration de liaison que vous définissez dans le code.
Propriété | Description | Peut être envoyé via l’attribut | Peut être envoyé via RequestBody |
---|---|---|---|
pubsubname | Nom du service de composant de l’éditeur. | ✔️ | ✔️ |
topic | Le nom ou l’identificateur de l’éditeur de la rubrique. | ✔️ | ✔️ |
payload | Obligatoire. Message en cours de publication. | ❌ | ✔️ |
Le tableau suivant décrit les propriétés de configuration de liaison que vous définissez dans le fichier function.json.
Propriété function.json | Description | Peut être envoyé via l’attribut | Peut être envoyé via RequestBody |
---|---|---|---|
pubsubname | Nom du service de composant de l’éditeur. | ✔️ | ✔️ |
topic | Le nom ou l’identificateur de l’éditeur de la rubrique. | ✔️ | ✔️ |
payload | Obligatoire. Message en cours de publication. | ❌ | ✔️ |
Le tableau suivant explique les propriétés de configuration de liaison pour @dapp.dapr_publish_output
que vous définissez dans votre code Python.
Propriété | Description | Peut être envoyé via l’attribut | Peut être envoyé via RequestBody |
---|---|---|---|
pub_sub_name | Le nom du publicateur de l’événement. | ✔️ | ✔️ |
topic | Le nom ou l’identificateur de la rubrique de l’éditeur. | ✔️ | ✔️ |
payload | Obligatoire. Message en cours de publication. | ❌ | ✔️ |
Si les propriétés sont définies dans les attributs et RequestBody
, la priorité est attribuée aux données fournies dans RequestBody
.
Pour obtenir des exemples complets, consultez la section Exemple.
Usage
Pour utiliser la liaison de sortie de publication Dapr, commencez par configurer un composant de publication ou d’abonnement Dapr. Vous pouvez en savoir plus sur le composant à utiliser et sur la façon de le configurer dans la documentation officielle Dapr.
- Spécifications du composant de publication/abonnement Dapr
- Guide pratique pour publier un message et s’abonner à une rubrique
Pour utiliser daprPublish
dans Python v2, configurez votre projet avec les dépendances appropriées.
Dans votre fichier
requirements.text
, ajoutez la ligne suivante :azure-functions==1.18.0b3
Dans le terminal, installez la bibliothèque Python.
pip install -r .\requirements.txt
Modifiez votre fichier
local.setting.json
avec la configuration suivante :"PYTHON_ISOLATE_WORKER_DEPENDENCIES":1