Liaisons Azure Service Bus pour Azure Functions

Azure Functions s’intègre avec Azure Service Bus via des déclencheurs et des liaisons. L’intégration avec Service Bus vous permet de créer des fonctions qui réagissent et envoient des messages de file d’attente ou de rubrique.

Action Type
Exécuter une fonction durant la création d’un message de file d’attente ou de rubrique Service Bus Déclencheur
Envoyer des messages Azure Service Bus Liaison de sortie

Installer l’extension

Le package NuGet de l’extension que vous installez dépend du mode C# que vous utilisez dans votre application de fonction :

Les fonctions s’exécutent dans un processus de travail C# isolé. Pour en savoir plus, consultez Guide pour l’exécution d’Azure Functions C# dans un processus Worker isolé.

Ajoutez l’extension à votre projet en installant ce package NuGet.

La fonctionnalité de l’extension varie en fonction de la version de l’extension :

Cette version introduit la possibilité de se connecter à l’aide d’une identité au lieu d’un secret. Pour obtenir un tutoriel sur la configuration de vos applications de fonction avec des identités managées, consultez le tutoriel Création d’une application de fonction avec des connexions basées sur l’identité.

Cette version vous permet de lier des types à partir de Azure.Messaging.ServiceBus.

Ajoutez l’extension à votre projet en installant le package NuGet, version 5.x.

Installer le bundle

La liaison Service Bus fait partie d’un bundle d’extension, qui est spécifié dans votre Fichier projet host.json. Vous devrez peut-être modifier cette offre groupée pour modifier la version de la liaison ou si les offres groupées ne sont pas encore installées. Pour plus d’informations, consultez le bundle d’extensions.

Cette version introduit la possibilité de se connecter à l’aide d’une identité au lieu d’un secret. Pour obtenir un tutoriel sur la configuration de vos applications de fonction avec des identités managées, consultez le tutoriel sur la création d’une application de fonction avec des connexions basées sur l’identité.

Vous pouvez ajouter cette version de l’extension à partir de l’offre groupée d’extension v3 en ajoutant ou en remplaçant le code suivant dans votre fichier host.json :

{
    "version": "2.0",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[3.3.0, 4.0.0)"
    }
}

Pour en savoir plus, consultez Mettre à jour vos extensions.

Types de liaisons

Les types de liaisons pris en charge pour .NET dépendent à la fois de la version de l’extension et du mode d’exécution C#, qui peut être l’un des suivants :

Une bibliothèque de classes de processus Worker isolé est une fonction C# compilée exécutée dans un processus Worker isolé du runtime.

Choisissez une version pour afficher les détails des types de liaison du mode et de la version.

Le processus Worker isolé prend en charge les types de paramètres en fonction des tableaux ci-dessous.

Déclencheur Service Bus

Lorsque vous souhaitez que la fonction traite un seul message, le déclencheur Service Bus peut se lier aux types suivants :

Type Description
string Message en tant que chaîne. À utiliser lorsque le message est du texte simple.
byte[] Les octets du message.
Types sérialisables JSON Quand un événement contient des données JSON, Functions tente de désérialiser les données JSON dans un type d’Objet CLR traditionnel (OCT).
ServiceBusReceivedMessage1 L’objet message.

Lors de la liaison à ServiceBusReceivedMessage, vous pouvez également inclure un paramètre de type ServiceBusMessageActions1,2 pour effectuer des actions de règlement des messages.

Lorsque vous souhaitez que la fonction traite un lot de messages, le déclencheur Service Bus peut se lier aux types suivants :

Type Description
T[]T est l’un des types de messages uniques Tableau d’événements du lot. Chaque entrée représente un événement.

Lors de la liaison à ServiceBusReceivedMessage[], vous pouvez également inclure un paramètre de type ServiceBusMessageActions1,2 pour effectuer des actions de règlement des messages.

1 Pour utiliser ces types, vous devez référencer Microsoft.Azure.Functions.Worker.Extensions.ServiceBus 5.14.1 ou version ultérieure et les dépendances courantes des liaisons de type kit de développement logiciel (SDK).

2 Lors de l’utilisation ServiceBusMessageActions, définissez la AutoCompleteMessages propriété de l’attribut de déclencheur sur false. Cela empêche le runtime de tenter de terminer les messages après un appel de fonction réussi.

Liaison de sortie Service Bus

Lorsque vous souhaitez que la fonction écrive un seul message, la liaison de sortie Service Bus peut se lier aux types suivants :

Type Description
string Message en tant que chaîne. À utiliser lorsque le message est du texte simple.
byte[] Les octets du message.
Types sérialisables JSON Objet représentant le message. Les fonctions tentent de sérialiser un ancien type d'objet CLR (POCO) en données JSON.

Lorsque vous souhaitez que la fonction écrive plusieurs messages, la liaison de sortie de file d’attente peut se lier aux types suivants :

Type Description
T[]T est l’un des types de messages uniques Un tableau contenant plusieurs messages. Chaque entrée représente un message.

Pour d'autres scénarios de sortie, créez et utilisez directement des types à partir d’Azure.Messaging.ServiceBus.

Paramètres host.json

Cette section décrit les paramètres de configuration disponibles pour cette liaison, qui dépendent de la version du runtime et de l’extension.

{
    "version": "2.0",
    "extensions": {
        "serviceBus": {
            "clientRetryOptions":{
                "mode": "exponential",
                "tryTimeout": "00:01:00",
                "delay": "00:00:00.80",
                "maxDelay": "00:01:00",
                "maxRetries": 3
            },
            "prefetchCount": 0,
            "transportType": "amqpWebSockets",
            "webProxy": "https://proxyserver:8080",
            "autoCompleteMessages": true,
            "maxAutoLockRenewalDuration": "00:05:00",
            "maxConcurrentCalls": 16,
            "maxConcurrentSessions": 8,
            "maxMessageBatchSize": 1000,
            "minMessageBatchSize": 1,
            "maxBatchWaitTime": "00:00:30",
            "sessionIdleTimeout": "00:01:00",
            "enableCrossEntityTransactions": false
        }
    }
}

Les paramètres clientRetryOptions s’appliquent uniquement aux interactions avec le service Service Bus. Ils n’affectent pas les nouvelles tentatives d’exécutions de fonction. Pour plus d’informations, consultez Nouvelles tentatives.

Propriété Default Description
mode Exponential Approche à utiliser pour calculer les délais de nouvelle tentative. Le mode exponentiel par défaut effectue de nouvelles tentatives avec un délai basé sur une stratégie de backoff, où chaque tentative augmente la durée d’attente avant la nouvelle tentative. Le mode Fixed effectue de nouvelles tentatives à intervalles fixes, chaque délai ayant la même durée.
tryTimeout 00:01:00 Durée maximale d’attente d’une opération par tentative.
delay 00:00:00.80 Délai ou facteur de backoff à appliquer entre les nouvelles tentatives.
maxDelay 00:01:00 Délai maximal à accorder entre les nouvelles tentatives.
maxRetries 3 Nombre maximal de nouvelles tentatives avant de considérer que l’opération associée a échoué.
prefetchCount 0 Obtient ou définit le nombre de messages que le destinataire des messages peut demander simultanément.
transportType amqpTcp Protocole et transport utilisés pour communiquer avec Service Bus. Options disponibles : amqpTcp, amqpWebSockets
webProxy n/a Proxy à utiliser pour communiquer avec Service Bus sur des sockets web. Un proxy ne peut pas être utilisé avec le transport amqpTcp.
autoCompleteMessages true Détermine s’il faut ou non terminer automatiquement les messages après l’exécution réussie de la fonction.
maxAutoLockRenewalDuration 00:05:00 Durée maximale pendant laquelle le verrouillage de message doit être renouvelé automatiquement. Ce paramètre s’applique uniquement aux fonctions qui reçoivent un seul message à la fois.
maxConcurrentCalls 16 Nombre maximal d’appels simultanés pour le rappel que l’on peut lancer par instance mise à l’échelle. Par défaut, le runtime Functions traite plusieurs messages simultanément. Ce paramètre est utilisé uniquement lorsque la propriété ou l’attribut isSessionsEnabled sur le déclencheur a la valeur false. Ce paramètre s’applique uniquement aux fonctions qui reçoivent un seul message à la fois.
maxConcurrentSessions 8 Nombre maximal de sessions qui peuvent être traitées simultanément par instance mise à l’échelle. Ce paramètre est utilisé uniquement lorsque la propriété ou l’attribut isSessionsEnabled sur le déclencheur a la valeur true. Ce paramètre s’applique uniquement aux fonctions qui reçoivent un seul message à la fois.
maxMessageBatchSize 1000 Nombre maximal de messages qui seront transmis à chaque appel de fonction. Ce paramètre s’applique uniquement aux fonctions qui reçoivent un lot de messages.
minMessageBatchSize1 1 Nombre minimal de messages souhaités dans un lot. La valeur minimale s’applique uniquement lorsque la fonction reçoit plusieurs messages et doit être inférieure à maxMessageBatchSize.
La taille minimale n’est pas strictement garantie. Un lot partiel est distribué quand un lot complet ne peut pas être préparé avant l’expiration du maxBatchWaitTime.
maxBatchWaitTime1 00:00:30 Intervalle maximal devant être observé par le déclencheur pour remplir un lot avant d’appeler la fonction. Le temps d’attente est uniquement pris en compte lorsque minMessageBatchSize est supérieur à 1 et est ignoré dans d’autres cas. Si moins de minMessageBatchSize messages étaient disponibles avant l’expiration du temps d’attente, la fonction est appelée à l’aide d’un lot partiel. Le temps d’attente autorisé le plus long est de 50 % de la durée de verrouillage des messages d’entité, ce qui signifie que le maximum autorisé est de 2 minutes et 30 secondes. Sinon, vous pouvez obtenir des exceptions de verrou.

REMARQUE : cet intervalle n’est pas une stricte garantie du minutage exact sur lequel la fonction est appelée. Il existe une petite marge d’erreur en raison de la précision du retardateur.
sessionIdleTimeout n/a Délai d’attente maximal pour la réception d’un message pour la session active. Une fois ce délai écoulé, la session est fermée et la fonction tente de traiter une autre session.
enableCrossEntityTransactions false Indique s’il faut ou non activer les transactions qui s’étendent sur plusieurs entités dans un espace de noms Service Bus.

1 L’utilisation de minMessageBatchSize et de maxBatchWaitTime requiert la version v5.10.0 ou ultérieure du package Microsoft.Azure.WebJobs.Extensions.ServiceBus.

Étapes suivantes