liaison de sortie Azure Service Bus pour Azure Functions

Utilisez Azure Service Bus liaison de sortie pour envoyer des messages de file d’attente ou de rubrique.

Pour plus d’informations sur les détails d’installation et de configuration, consultez la vue d’ensemble.

Important

Cet article utilise des onglets pour prendre en charge plusieurs versions du modèle de programmation Node.js. Le modèle v4 est en disponibilité générale. Il est conçu pour offrir une expérience plus flexible et intuitive aux développeurs JavaScript et TypeScript. Pour plus d’informations sur le fonctionnement du modèle v4, reportez-vous au guide du développeur Azure Functions Node.js. Pour plus d’informations sur les différences entre v3 et v4, consultez le guide de migration.

Azure Functions prend en charge deux modèles de programmation pour Python. La façon dont vous définissez vos liaisons dépend du modèle de programmation choisi.

Le modèle de programmation Python v2 vous permet de définir des liaisons à l’aide de décorateurs directement dans votre code de fonction Python. Pour plus d’informations, consultez le guide du développeur Python.

Cet article prend en compte les deux modèles de programmation.

Exemple

Le support Go n’est pas disponible pour ce liaison pour le moment.

Une fonction C# peut être créée à l’aide de l’un des modes C# suivants :

  • Modèle worker isolé : fonction C# compilée exécutée dans un processus worker isolé du runtime. Le processus de travail isolé est nécessaire pour prendre en charge les fonctions C# s’exécutant sur les versions LTS et non LTS .NET et .NET Framework. Les extensions pour les fonctions de processus worker isolées utilisent des espaces de noms Microsoft.Azure.Functions.Worker.Extensions.*.
  • Modèle In-process : fonction C# compilée exécutée dans le même processus que le runtime Functions. Dans une variation de ce modèle, Functions peut être exécuté à l’aide de scripts C#, principalement pris en charge pour la modification du portail C#. Les extensions pour les fonctions in-process utilisent des espaces de noms Microsoft.Azure.WebJobs.Extensions.*.

Important

La prise en charge du modèle in-process prendra fin le 10 novembre 2026. Pour continuer à bénéficier d’une prise en charge complète, nous vous recommandons vivement de migrer vos applications vers le modèle worker isolé.

Ce code définit et initialise ILogger :

private readonly ILogger<ServiceBusReceivedMessageFunctions> _logger;

public ServiceBusReceivedMessageFunctions(ILogger<ServiceBusReceivedMessageFunctions> logger)
{
    _logger = logger;
}

Cet exemple montre une fonction C# qui reçoit un message et l’écrit dans une deuxième file d’attente :

[Function(nameof(ServiceBusReceivedMessageFunction))]
[ServiceBusOutput("outputQueue", Connection = "ServiceBusConnection")]
public string ServiceBusReceivedMessageFunction(
    [ServiceBusTrigger("queue", Connection = "ServiceBusConnection")] ServiceBusReceivedMessage message)
{
    _logger.LogInformation("Message ID: {id}", message.MessageId);
    _logger.LogInformation("Message Body: {body}", message.Body);
    _logger.LogInformation("Message Content-Type: {contentType}", message.ContentType);

    var outputMessage = $"Output message created at {DateTime.Now}";
    return outputMessage;
}

 


Cet exemple utilise un déclencheur HTTP avec un OutputType objet pour envoyer une réponse HTTP et écrire le message de sortie.

[Function("HttpSendMsg")]
public async Task<OutputType> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req, FunctionContext context)
{
   _logger.LogInformation($"C# HTTP trigger function processed a request for {context.InvocationId}.");

   HttpResponseData response = req.CreateResponse(HttpStatusCode.OK);
   await response.WriteStringAsync("HTTP response: Message sent");

   return new OutputType()
   {
       OutputEvent = "MyMessage",
       HttpResponse = response
   };
}

Ce code définit le type de sortie multiple OutputType, qui inclut la définition de liaison de sortie Service Bus sur OutputEvent :

 public class OutputType
{
   [ServiceBusOutput("TopicOrQueueName", Connection = "ServiceBusConnection")]
   public string OutputEvent { get; set; }

   public HttpResponseData HttpResponse { get; set; }
}

L’exemple suivant montre une fonction Java qui envoie un message à une file d’attente Service Bus myqueue lorsqu’elle est déclenchée par une requête HTTP.

@FunctionName("httpToServiceBusQueue")
@ServiceBusQueueOutput(name = "message", queueName = "myqueue", connection = "AzureServiceBusConnection")
public String pushToQueue(
  @HttpTrigger(name = "request", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS)
  final String message,
  @HttpOutput(name = "response") final OutputBinding<T> result ) {
      result.setValue(message + " has been sent.");
      return message;
 }

Dans la bibliothèque runtime Java functions, utilisez l’annotation @QueueOutput sur les paramètres de fonction dont la valeur est écrite dans une file d’attente Service Bus. Le type de paramètre doit être OutputBinding<T>, où T est tout type Java natif d’un ancien objet Java plan (POJO).

Java fonctions peuvent également écrire dans une rubrique Service Bus. L’exemple suivant utilise l’annotation @ServiceBusTopicOutput afin de décrire la configuration pour la liaison de sortie.

@FunctionName("sbtopicsend")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
            @ServiceBusTopicOutput(name = "message", topicName = "mytopicname", subscriptionName = "mysubscription", connection = "ServiceBusConnection") OutputBinding<String> message,
            final ExecutionContext context) {

        String name = request.getBody().orElse("Azure Functions");

        message.setValue(name);
        return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();

    }

L’exemple suivant montre une fonction TypeScript déclenchée par le minuteur qui envoie un message de file d'attente toutes les cinq minutes.

import { app, InvocationContext, output, Timer } from '@azure/functions';

export async function timerTrigger1(myTimer: Timer, context: InvocationContext): Promise<string> {
    const timeStamp = new Date().toISOString();
    return `Message created at: ${timeStamp}`;
}

app.timer('timerTrigger1', {
    schedule: '0 */5 * * * *',
    return: output.serviceBusQueue({
        queueName: 'testqueue',
        connection: 'MyServiceBusConnection',
    }),
    handler: timerTrigger1,
});

Pour sortir plusieurs messages, retournez un tableau au lieu d’un seul objet. Par exemple :

const timeStamp = new Date().toISOString();
const message = `Message created at: ${timeStamp}`;
return [`1: ${message}`, `2: ${message}`];

L’exemple suivant montre une fonction JavaScript déclenchée par le minuteur qui envoie un message de file d'attente toutes les cinq minutes.

const { app, output } = require('@azure/functions');

const serviceBusOutput = output.serviceBusQueue({
    queueName: 'testqueue',
    connection: 'MyServiceBusConnection',
});

app.timer('timerTrigger1', {
    schedule: '0 */5 * * * *',
    return: serviceBusOutput,
    handler: (myTimer, context) => {
        const timeStamp = new Date().toISOString();
        return `Message created at: ${timeStamp}`;
    },
});

Pour sortir plusieurs messages, retournez un tableau au lieu d’un seul objet. Par exemple :

const timeStamp = new Date().toISOString();
const message = `Message created at: ${timeStamp}`;
return [`1: ${message}`, `2: ${message}`];

L’exemple suivant montre une liaison de sortie Service Bus dans un fichier function.json et une fonction PowerShell qui utilise la liaison.

Voici les données de liaison dans le fichier function.json :

{
  "bindings": [
    {
      "type": "serviceBus",
      "direction": "out",
      "connection": "AzureServiceBusConnectionString",
      "name": "outputSbMsg",
      "queueName": "outqueue",
      "topicName": "outtopic"
    }
  ]
}

Voici le code PowerShell qui crée un message en tant que sortie de la fonction.

param($QueueItem, $TriggerMetadata) 

Push-OutputBinding -Name outputSbMsg -Value @{ 
    name = $QueueItem.name 
    employeeId = $QueueItem.employeeId 
    address = $QueueItem.address 
} 

L’exemple suivant montre comment écrire dans des rubriques Service Bus et Service Bus files d’attente dans Python. L’exemple dépend de l’utilisation du modèle de programmation v1 ou v2 Python.

Cet exemple montre comment écrire dans une rubrique Service Bus.

import logging
import azure.functions as func

app = func.FunctionApp()

@app.route(route="put_message")
@app.service_bus_topic_output(arg_name="message",
                              connection="AzureServiceBusConnectionString",
                              topic_name="outTopic")
def main(req: func.HttpRequest, message: func.Out[str]) -> func.HttpResponse:
    input_msg = req.params.get('message')
    message.set(input_msg)
    return 'OK'

Cet exemple montre comment écrire dans une file d’attente Service Bus.

import azure.functions as func

app = func.FunctionApp()

@app.route(route="put_message")
@app.service_bus_queue_output(
    arg_name="msg",
    connection="AzureServiceBusConnectionString",
    queue_name="outqueue")
def put_message(req: func.HttpRequest, msg: func.Out[str]):
    msg.set(req.get_body().decode('utf-8'))
    return 'OK'

Attributs

Les bibliothèques C# In-process et de processus Worker isolé utilisent des attributs pour définir la liaison de sortie. Le script C# utilise à la place un fichier de configuration function.json comme décrit dans le guide de script C#.

Dans les bibliothèques de classes C#, utilisez la ServiceBusOutputAttribute pour définir la file d’attente ou la rubrique écrite par la sortie.

Le tableau suivant décrit les propriétés que vous pouvez définir à l’aide de l’attribut :

Propriété Descriptif
EntityType Définit le type d’entité en tant que Queue pour l’envoi de messages à une file d’attente ou Topic lors de l’envoi de messages à une rubrique.
QueueOrTopicName Nom de la rubrique ou de la file d’attente à laquelle envoyer les messages. Utilisez EntityType pour définir le type de destination.
Connexion Nom d’un paramètre d’application ou d’une collection de paramètres qui spécifie comment se connecter à Service Bus. Consultez Connexions.

Décorateurs

Applies uniquement au modèle de programmation Python v2.

Pour Python fonctions v2 définies à l’aide d’un décorateur, les propriétés suivantes sur le service_bus_topic_output :

Propriété Descriptif
arg_name Nom de la variable qui représente le message de la file d’attente ou de la rubrique dans le code de la fonction.
queue_name Nom de la file d’attente. Défini uniquement en cas d’envoi de messages de file d’attente, ne s’applique pas à une rubrique.
topic_name Nom de la rubrique. Défini uniquement en cas d’envoi de messages de rubrique, ne s’applique pas à une file d’attente.
connection Nom d’un paramètre d’application ou d’une collection de paramètres qui spécifie comment se connecter à Service Bus. Consultez Connexions.

Pour Python fonctions définies à l’aide de function.json, consultez la section Configuration.

Commentaires

Les annotations ServiceBusQueueOutput et ServiceBusTopicOutput sont disponibles pour écrire un message en tant que sortie de fonction. Le paramètre assorti de ces annotations doit être déclaré en tant que OutputBinding<T>T est le type correspondant au type du message.

Lorsque vous développez en local, ajoutez vos paramètres d’application dans le fichier local.settings.json de la collection Values.

Paramétrage

Applies uniquement au modèle de programmation Python v1.

Le tableau suivant explique les propriétés que vous pouvez définir pour l’objet options passé à la méthode output.serviceBusQueue().

Propriété Descriptif
queueName Nom de la file d’attente.
connexion Nom d’un paramètre d’application ou d’une collection de paramètres qui spécifie comment se connecter à Service Bus. Consultez Connexions.

Le tableau suivant explique les propriétés que vous pouvez définir pour l’objet options passé à la méthode output.serviceBusTopic().

Propriété Descriptif
topicName Nom de la rubrique.
connexion Nom d’un paramètre d’application ou d’une collection de paramètres qui spécifie comment se connecter à Service Bus. Consultez Connexions.

Lorsque vous développez en local, ajoutez vos paramètres d’application dans le fichier local.settings.json de la collection Values.

Le tableau suivant décrit les propriétés de configuration de liaison que vous définissez dans le fichier function.json et l’attribut ServiceBus.

Propriété function.json Descriptif
type Cette propriété doit être définie sur serviceBus. Cette propriété est définie automatiquement lorsque vous créez le déclencheur dans le portail Azure.
direction Cette propriété doit être définie sur out. Cette propriété est définie automatiquement lorsque vous créez le déclencheur dans le portail Azure.
nom Nom de la variable qui représente le message de la file d’attente ou de la rubrique dans le code de la fonction. Défini sur « $return » pour faire référence à la valeur de retour de la fonction.
queueName Nom de la file d’attente. Défini uniquement en cas d’envoi de messages de file d’attente, ne s’applique pas à une rubrique.
topicName Nom de la rubrique. Défini uniquement en cas d’envoi de messages de rubrique, ne s’applique pas à une file d’attente.
connexion Nom d’un paramètre d’application ou d’une collection de paramètres qui spécifie comment se connecter à Service Bus. Consultez Connexions.
accessRights (v1 uniquement) Droits d’accès pour le chaîne de connexion. Les valeurs disponibles sont manage et listen. La valeur par défaut est manage, ce qui indique que connection a l'autorisation manage. Si vous utilisez un chaîne de connexion qui n'a pas l'autorisation Manage, définissez accessRights sur « écouter ». Sinon, le runtime Functions pourrait échouer à effectuer des opérations qui nécessitent des droits de gestion. Dans Azure Functions version 2.x et ultérieure, cette propriété n'est pas disponible, car la dernière version du SDK Service Bus ne prend pas en charge la gestion des opérations.

Lorsque vous développez en local, ajoutez vos paramètres d’application dans le fichier local.settings.json de la collection Values.

Pour obtenir des exemples complets, consultez la section Exemple.

Utilisation

Toutes les modalités C# et les versions d’extension prennent en charge les types de paramètres de sortie suivants :

Catégorie Descriptif
System.String À utiliser lorsque le message à écrire est un texte simple. Lorsque la valeur du paramètre est Null à la sortie de la fonction, Functions ne crée pas de message.
byte[] À utiliser pour écrire des messages de données binaires. Lorsque la valeur du paramètre est Null à la sortie de la fonction, Functions ne crée pas de message.
Objet Lorsqu’un message contient du code JSON, Functions sérialise l’objet dans une charge utile de message JSON. Lorsque la valeur du paramètre est Null à la sortie de la fonction, Functions crée un message avec un objet Null.

Les types de paramètres spécifiques à la messagerie contiennent des métadonnées de message supplémentaires et ne sont pas compatibles avec la sérialisation JSON. Par conséquent, il n’est pas possible d’utiliser ServiceBusMessage avec la liaison de sortie dans le modèle isolé. Les types spécifiques pris en charge par la liaison de sortie dépendent de la version du runtime Functions, de la version du package d’extension et de la modalité C# utilisée.

Lorsque vous souhaitez que la fonction écrive un seul message, la liaison de sortie Service Bus peut être liée aux types suivants :

Catégorie Descriptif
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 Service Bus peut être liée aux types suivants :

Catégorie Descriptif
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 un ServiceBusClient avec d’autres types à partir de Azure. Messaging.ServiceBus directement. Consultez Register Azure clients pour obtenir un exemple d’utilisation de l’injection de dépendances pour créer un type de client à partir du Kit de développement logiciel (SDK) Azure.

Dans Azure Functions 1.x, le runtime crée la file d'attente s'il n'existe pas et que vous avez défini accessRights sur manage. Dans Azure Functions version 2.x et ultérieure, la file d'attente ou la rubrique doit déjà exister. Si vous spécifiez une file d'attente ou une rubrique qui n'existe pas, la fonction échoue.

Utilisez le sdk Azure Service Bus plutôt que la liaison de sortie intégrée.

Accédez au message de sortie en retournant la valeur directement ou en utilisant context.extraOutputs.set().

La sortie vers l'Service Bus est disponible via l'applet de commande Push-OutputBinding où vous transmettez des arguments correspondant au nom désigné par le paramètre de nom de la liaison dans le fichier function.json.

Le paramètre de fonction de sortie doit être défini comme func.Out[str] ou func.Out[bytes]. Pour plus d’informations, reportez-vous à l’exemple de sortie . Vous pouvez également utiliser le sdk Azure Service Bus plutôt que la liaison de sortie intégrée.

Pour obtenir un exemple complet, consultez la section Exemples.

Connexions

Cette connection propriété est une référence à une clé dans les paramètres d’application qui renvoie une valeur utilisée par l’exécution des fonctions pour se connecter à l’instance du Service Bus utilisée par l’extension. La valeur du paramètre de propriété de connexion dépend du type de connexion :

  • Connexion d’identité gérée : La connection propriété est <CONNECTION_NAME_PREFIX> partagée par un groupe de paramètres qui définissent ensemble une connexion basée sur l’identité avec le Service Bus. Pour plus d’informations, voir Définir les connexions identités.
  • Référence Key Vault : Le connection paramètre de propriété renvoie une référence Azure Key Vault à l’emplacement où la chaîne de connexion est centralisée. Pour plus d’informations, voir Définir les connexions Key Vault.
  • Référence App Configuration : Le connection paramètre de propriété renvoie une référence Azure App Configuration qui renvoie une chaîne de connexion ou une référence Key Vault. Pour plus d’informations, consultez Azure App Configuration dans l’article sur les connexions.
  • Connection string : Le connection paramètre de propriété renvoie la chaîne de connexion réelle pour l’instance du Service Bus. Parce que la chaîne de connexion contient des clés secrètes partagées, vous devriez envisager d’utiliser une connexion d’identité gérée, lorsque c’est possible. Pour plus d’informations, voir Définir les connexions.

Pour en savoir plus sur les connexions de liaisons, consultez Gérer la connexion dans Azure Functions.

Pour obtenir une chaîne de connexion, suivez les étapes indiquées à la section Obtenir les informations d’identification de gestion. La chaîne de connexion doit être destinée à un espace de noms Service Bus, et non limitée à une file d’attente ou une rubrique spécifique.

Si le nom du paramètre de l’application commence par AzureWebJobs, vous pouvez spécifier uniquement le reste du nom. Par exemple, si vous définissez connectionMyServiceBussur , le runtime Functions recherche un paramètre d’application nommé AzureWebJobsMyServiceBus. Si vous laissez connection vide, l’exécution Functions utilise le Service Bus chaîne de connexion par défaut dans le paramètre de l’application nommé AzureWebJobsServiceBus.

Autorisations de mise à l’échelle

L’extension Service Bus utilise l’API Service Bus Administration (GetQueueRuntimePropertiesAsync / GetSubscriptionRuntimePropertiesAsync) pour récupérer des comptes de messages précis lors des décisions d’échelle. Cette API nécessite des permissions supplémentaires au-delà de ce qui est nécessaire pour envoyer ou recevoir des messages :

  • Chaînes de connexion SAS : La politique SAS doit inclure le droit de gestion d’accès.
  • Connexions basées sur l’identité : L’identité doit se voir attribuer le rôle Azure Service Bus Data Owner, ou un rôle personnalisé incluant Microsoft.ServiceBus/namespaces/*/read.

Quand la connexion n’a pas ces permissions, vous ne voyez pas d’erreurs au démarrage. Au lieu de cela, l’extension revient silencieusement à l’estimation des messages basée sur le peek, qui est moins précise et pourrait entraîner des décisions de mise à l’échelle retardées ou incorrectes.

Conseil / Astuce

Pour les charges de travail de production qui reposent sur l’auto-mise à l’échelle, incluez le droit d’accès Gérer (SAS) ou attribuez le rôle Azure Service Bus Data Owner (connexions basées sur l’identité) afin d’assurer un comportement d’échelle précis. chaîne de connexion dans le paramètre de l’application qui est nommé AzureWebJobsServiceBus.

Exceptions et codes de retour

Liaison Informations de référence
Service Bus codes d’erreur Service Bus
Service Bus limites Service Bus

Étapes suivantes