Déclencheur de rubrique Dapr pour Azure Functions
Azure Functions peut être déclenché sur un abonnement à la rubrique Dapr à l’aide des événements Dapr suivants.
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. |
[FunctionName("TransferEventBetweenTopics")]
public static void Run(
[DaprTopicTrigger("%PubSubName%", Topic = "A")] CloudEvent subEvent,
[DaprPublish(PubSubName = "%PubSubName%", Topic = "B")] out DaprPubSubEvent pubEvent,
ILogger log)
{
log.LogInformation("C# function processed a TransferEventBetweenTopics request from the Dapr Runtime.");
pubEvent = new DaprPubSubEvent("Transfer from Topic A: " + subEvent.Data);
}
Voici le code Java pour vous abonner à une rubrique à l’aide du déclencheur de rubrique Dapr :
@FunctionName("PrintTopicMessage")
public String run(
@DaprTopicTrigger(
pubSubName = "%PubSubName%",
topic = "B")
String payload,
final ExecutionContext context) throws JsonProcessingException {
Logger logger = context.getLogger();
logger.info("Java function processed a PrintTopicMessage request from the Dapr Runtime.");
Utilisez l’objet app
pour inscrire le daprTopicTrigger
:
const { app, trigger } = require('@azure/functions');
app.generic('TransferEventBetweenTopics', {
trigger: trigger.generic({
type: 'daprTopicTrigger',
name: "subEvent",
pubsubname: "%PubSubName%",
topic: "A"
}),
return: daprPublishOutput,
handler: async (request, context) => {
context.log("Node function processed a TransferEventBetweenTopics request from the Dapr Runtime.");
context.log(context.triggerMetadata.subEvent.data);
return { payload: context.triggerMetadata.subEvent.data };
}
});
Les exemples suivants montrent les déclencheurs Dapr dans un fichier function.json et du code PowerShell qui utilisent ces liaisons.
Voici le fichier function.json pour daprTopicTrigger
:
{
"bindings": [
{
"type": "daprTopicTrigger",
"pubsubname": "%PubSubName%",
"topic": "B",
"name": "subEvent",
"direction": "in"
}
]
}
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
param (
$subEvent
)
Write-Host "PowerShell function processed a PrintTopicMessage request from the Dapr Runtime."
# Convert the object to a JSON-formatted string with ConvertTo-Json
$jsonString = $subEvent["data"] | ConvertTo-Json -Compress
Write-Host "Topic B received a message: $jsonString"
L’exemple suivant montre un déclencheur de rubrique Dapr, qui utilise le modèle de programmation Python v2. Pour utiliser le daprTopicTrigger
dans votre code d’application de fonction Python :
import logging
import json
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="PrintTopicMessage")
@app.dapr_topic_trigger(arg_name="subEvent", pub_sub_name="%PubSubName%", topic="B", route="B")
def main(subEvent) -> None:
logging.info('Python function processed a PrintTopicMessage request from the Dapr Runtime.')
subEvent_json = json.loads(subEvent)
logging.info("Topic B received a message: " + subEvent_json["data"])
Attributs
Dans le modèle in-process, utilisez la commande DaprTopicTrigger
pour déclencher une liaison de publication/abonnement Dapr, qui prend en charge les propriétés suivantes.
Paramètre | Description |
---|---|
PubSubName | Nom de la publication/abonnement Dapr. |
Rubrique | Nom de la rubrique Dapr. |
Annotations
L’annotation DaprTopicTrigger
vous permet de créer une fonction qui s’exécute lorsqu’une rubrique est reçue.
Élément | Description |
---|---|
pubSubName | Nom de la publication/abonnement Dapr. |
topic | Nom de la rubrique Dapr. |
Configuration
Le tableau suivant décrit les propriétés de configuration de liaison que vous définissez dans le code.
Propriété | Description |
---|---|
pubsubname | Nom du type de composant de la publication/abonnement Dapr. |
topic | Nom de la rubrique. |
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 |
---|---|
pubsubname | Nom du type de composant de la publication/abonnement Dapr. |
topic | Nom de la rubrique. |
Le tableau suivant explique les propriétés de configuration de liaison pour @dapp.dapr_topic_trigger
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 | Nom du type de composant de l’abonnement Dapr. | ✔️ | ❌ |
topic | La rubrique d’abonnement. | ✔️ | ❌ |
Pour obtenir des exemples complets, consultez la section Exemple.
Usage
Pour utiliser un déclencheur de rubrique Dapr, commencez par configurer un composant de publication/abonnement Dapr. Pour en savoir plus sur le composant à utiliser et sur sa configuration, reportez-vous à la documentation officielle de Dapr.
- Spécifications du composant de publication/abonnement Dapr
- Guide pratique pour publier un message et s’abonner à une rubrique
Pour utiliser daprTopicTrigger
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