Vue d’ensemble des liaisons de sortie RabbitMQ pour Azure Functions

Notes

Les liaisons RabbitMQ ne sont entièrement prises en charge que sur des plans Premium et Dedicated. La consommation n’est pas prise en charge.

Utilisez la liaison de sortie RabbitMQ pour envoyer des messages à une file d’attente RabbitMQ.

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

Exemple

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 Worker isolé est requis pour prendre en charge les fonctions C# exécutées sur les versions LTS et non-LTS de .NET et de .NET Framework.
  • Modèle In-process : fonction C# compilée exécutée dans le même processus que le runtime Functions.
  • Script C# : principalement utilisé lors de la création de fonctions C# dans le portail Azure.
[Function(nameof(RabbitMQFunction))]
[RabbitMQOutput(QueueName = "destinationQueue", ConnectionStringSetting = "RabbitMQConnection")]
public static string Run([RabbitMQTrigger("queue", ConnectionStringSetting = "RabbitMQConnection")] string item,
    FunctionContext context)
{
    var logger = context.GetLogger(nameof(RabbitMQFunction));

    logger.LogInformation(item);

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

La fonction Java suivante utilise l’annotation @RabbitMQOutput des @RabbitMQOutput pour décrire la configuration d’une liaison de sortie de file d’attente RabbitMQ. La fonction envoie un message à la file d’attente RabbitMQ quand elle est déclenchée par un TimerTrigger toutes les 5 minutes.

@FunctionName("RabbitMQOutputExample")
public void run(
@TimerTrigger(name = "keepAliveTrigger", schedule = "0 */5 * * * *") String timerInfo,
@RabbitMQOutput(connectionStringSetting = "rabbitMQConnectionAppSetting", queueName = "hello") OutputBinding<String> output,
final ExecutionContext context) {
    output.setValue("Some string");
}

L’exemple suivant montre une liaison de sortie RabbitMQ dans un fichier function.json, et une fonction JavaScript qui utilise la liaison. La fonction lit le message d’un déclencheur HTTP et l’envoie à la file d’attente RabbitMQ.

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

{
    "bindings": [
        {
            "type": "httpTrigger",
            "direction": "in",
            "authLevel": "function",
            "name": "input",
            "methods": [
                "get",
                "post"
            ]
        },
        {
            "type": "rabbitMQ",
            "name": "outputMessage",
            "queueName": "outputQueue",
            "connectionStringSetting": "rabbitMQConnectionAppSetting",
            "direction": "out"
        }
    ]
}

Voici le code JavaScript :

module.exports = async function (context, input) {
    context.bindings.outputMessage = input.body;
};

L’exemple suivant montre une liaison de sortie RabbitMQ dans un fichier function.json, et une fonction Python qui utilise la liaison. La fonction lit le message d’un déclencheur HTTP et l’envoie à la file d’attente RabbitMQ.

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

{
    "scriptFile": "__init__.py",
    "bindings": [
        {
            "authLevel": "function",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req",
            "methods": [
                "get",
                "post"
            ]
        },
        {
            "type": "http",
            "direction": "out",
            "name": "$return"
        },​​
        {
            "type": "rabbitMQ",
            "name": "outputMessage",
            "queueName": "outputQueue",
            "connectionStringSetting": "rabbitMQConnectionAppSetting",
            "direction": "out"
        }
    ]
}

Dans _init_.py :

import azure.functions as func

def main(req: func.HttpRequest, outputMessage: func.Out[str]) -> func.HttpResponse:
    input_msg = req.params.get('message')
    outputMessage.set(input_msg)
    return 'OK'

Attributs

Les bibliothèques C# in-process et de processus Worker isolés utilisent l’attribut pour définir la fonction. Le script C# utilise un fichier config function.json à la place.

Le constructeur de l’attribut accepte les paramètres suivants :

Paramètre Description
QueueName Nom de la file d’attente à partir de laquelle les messages sont envoyés.
HostName Nom d’hôte de la file d’attente, par exemple 10.26.45.210. Ignoré lors de l’utilisation de ConnectStringSetting.
UserNameSetting Nom du paramètre d’application qui contient le nom d’utilisateur permettant d’accéder à la file d’attente, par exemple UserNameSetting: "%< UserNameFromSettings >%". Ignoré lors de l’utilisation de ConnectStringSetting.
PasswordSetting Nom du paramètre d’application qui contient le mot de passe permettant d’accéder à la file d’attente, par exemple PasswordSetting: "%< PasswordFromSettings >%". Ignoré lors de l’utilisation de ConnectStringSetting.
ConnectionStringSetting Nom du paramètre d’application qui contient la chaîne de connexion de la file d’attente de messages RabbitMQ. Le déclencheur ne fonctionnera pas si vous spécifiez la chaîne de connexion directement et non par le biais d’un paramètre d’application. Par exemple, si vous avez défini ConnectionStringSetting: "rabbitMQConnection", alors dans le fichier local.settings.json et dans votre application de fonction, vous avez besoin d’un paramètre tel que "RabbitMQConnection" : "< ActualConnectionstring >".
Port Obtient ou définit le port utilisé. La valeur par défaut est 0. Elle pointe vers le paramètre de port par défaut du client RabbitMQ, à savoir 5672.

Dans les bibliothèques de classes C#, utilisez l’attribut RabbitMQTrigger.

Voici un attribut RabbitMQTrigger dans une signature de méthode pour une bibliothèque de processus Worker isolé :

[Function(nameof(RabbitMQFunction))]
[RabbitMQOutput(QueueName = "destinationQueue", ConnectionStringSetting = "RabbitMQConnection")]
public static string Run([RabbitMQTrigger("queue", ConnectionStringSetting = "RabbitMQConnection")] string item,
    FunctionContext context)
{

Annotations

L’annotation RabbitMQOutput vous permet de créer une fonction qui s’exécute lors de la création d’un message RabbitMQ.

L’annotation prend en charge les paramètres de configuration suivants :

Paramètre Description
queueName Nom de la file d’attente à partir de laquelle les messages sont envoyés.
hostName Nom d’hôte de la file d’attente, par exemple 10.26.45.210. Ignoré lors de l’utilisation de ConnectStringSetting.
userNameSetting Nom du paramètre d’application qui contient le nom d’utilisateur permettant d’accéder à la file d’attente, par exemple UserNameSetting: "%< UserNameFromSettings >%". Ignoré lors de l’utilisation de ConnectStringSetting.
passwordSetting Nom du paramètre d’application qui contient le mot de passe permettant d’accéder à la file d’attente, par exemple PasswordSetting: "%< PasswordFromSettings >%". Ignoré lors de l’utilisation de ConnectStringSetting.
connectionStringSetting Nom du paramètre d’application qui contient la chaîne de connexion de la file d’attente de messages RabbitMQ. Le déclencheur ne fonctionnera pas si vous spécifiez la chaîne de connexion directement et non par le biais d’un paramètre d’application. Par exemple, si vous avez défini ConnectionStringSetting: "rabbitMQConnection", alors dans le fichier local.settings.json et dans votre application de fonction, vous avez besoin d’un paramètre tel que "RabbitMQConnection" : "< ActualConnectionstring >".
port Obtient ou définit le port utilisé. La valeur par défaut est 0. Elle pointe vers le paramètre de port par défaut du client RabbitMQ, à savoir 5672.

Pour plus d’informations, consultez l’exemple de liaison de sortie.

Configuration

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
type Cette propriété doit être définie sur RabbitMQ.
direction Cette propriété doit être définie sur out.
name Nom de la variable qui représente la file d’attente dans le code de la fonction.
queueName Nom de la file d’attente à laquelle envoyer les messages.
hostName Nom d’hôte de la file d’attente, par exemple 10.26.45.210. Ignoré lors de l’utilisation de connectStringSetting.
userName Nom du paramètre d’application qui contient le nom d’utilisateur permettant d’accéder à la file d’attente, par exemple UserNameSetting : « < UserNameFromSettings > ». Ignoré lors de l’utilisation de connectStringSetting.
mot de passe Nom du paramètre d’application qui contient le mot de passe permettant d’accéder à la file d’attente, par exemple UserNameSetting : « < UserNameFromSettings > ». Ignoré lors de l’utilisation de connectStringSetting.
connectionStringSetting Nom du paramètre d’application qui contient la chaîne de connexion de la file d’attente de messages RabbitMQ. Le déclencheur ne fonctionnera pas si vous spécifiez la chaîne de connexion directement plutôt que par le biais d’un paramètre d’application dans local.settings.json. Par exemple, si vous avez défini connectionStringSetting: "rabbitMQConnection", alors dans le fichier local.settings.json et dans votre application de fonction, vous avez besoin d’un paramètre tel que "rabbitMQConnection" : "< ActualConnectionstring >".
port Obtient ou définit les ports utilisés. La valeur par défaut est 0. Elle pointe vers le paramètre de port par défaut du client RabbitMQ, à savoir 5672.

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

Pour obtenir des exemples complets, consultez la section Exemple.

Utilisation

Le type de paramètre pris en charge par le déclencheur RabbitMQ dépend de la version du runtime Functions, de la version du package d’extension et de la modalité C# utilisée.

Les liaisons RabbitMQ prennent actuellement en charge uniquement les types d’objets string et mis en série lorsqu’elles sont exécutées dans un processus worker isolé.

Vous trouverez un exemple complet sur la page Exemple C#.

Utilisez les types de paramètres suivants pour la liaison de sortie :

  • byte[] : Si la valeur du paramètre est Null à la sortie de la fonction, Functions ne crée pas de message.
  • string : Si la valeur du paramètre est Null à la sortie de la fonction, Functions ne crée pas de message.
  • POJO - Si la valeur du paramètre n’est pas formatée en tant qu’objet Java, une erreur est reçue.

Le message de la file d’attente est disponible via context.bindings.<NAME>, où <NAME> correspond au nom défini dans function.json. Si la charge utile est JSON, la valeur est désérialisée en objet.

Consultez l’exemple en Python.

Étapes suivantes