Présentation du déclencheur 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 le déclencheur RabbitMQ pour répondre aux messages d’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 @RabbitMQTrigger des @RabbitMQTrigger pour décrire la configuration d’un déclencheur de file d’attente RabbitMQ. La fonction récupère le message placé dans la file d’attente et l’ajoute dans les journaux.

@FunctionName("RabbitMQTriggerExample")
public void run(
    @RabbitMQTrigger(connectionStringSetting = "rabbitMQConnectionAppSetting", queueName = "queue") String input,
    final ExecutionContext context)
{
    context.getLogger().info("Java HTTP trigger processed a request." + input);
}

L’exemple suivant montre une liaison de déclencheur RabbitMQ dans un fichier function.json et une fonction JavaScript qui utilise la liaison. La fonction lit et journalise un message RabbitMQ.

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

{​​
    "bindings": [
        {​​
            "name": "myQueueItem",
            "type": "rabbitMQTrigger",
            "direction": "in",
            "queueName": "queue",
            "connectionStringSetting": "rabbitMQConnectionAppSetting"
        }​​
    ]
}​​

Voici le code de script JavaScript :

module.exports = async function (context, myQueueItem) {​​
    context.log('JavaScript RabbitMQ trigger function processed work item', myQueueItem);
}​​;

L’exemple suivant montre comment lire un message de file d’attente RabbitMQ à l’aide d’un déclencheur.

Une liaison RabbitMQ est définie dans function.json, où le type est défini sur .

{​​
    "scriptFile": "__init__.py",
    "bindings": [
        {​​
            "name": "myQueueItem",
            "type": "rabbitMQTrigger",
            "direction": "in",
            "queueName": "queue",
            "connectionStringSetting": "rabbitMQConnectionAppSetting"
        }​​
    ]
}​​
import logging
import azure.functions as func

def main(myQueueItem) -> None:
    logging.info('Python RabbitMQ trigger function processed a queue item: %s', myQueueItem)

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 à la place un fichier config function.json.

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 RabbitMQTrigger 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 options de configuration suivantes :

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.

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 RabbitMQTrigger.
direction Cette propriété doit être définie sur in.
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 à 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.

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 modalité C# utilisée.

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

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

Reportez-vous aux annotations Java.

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.

Files d’attente de lettres mortes

Les files d’attente de lettres mortes et les échanges ne peuvent pas être contrôlés ou configurés à partir du déclencheur RabbitMQ. Pour utiliser les files d’attente de lettres mortes, préconfigurez la file d’attente utilisée par le déclencheur dans RabbitMQ. Reportez-vous à la documentation de RabbitMQ.

Paramètres host.json

Cette section décrit les paramètres de configuration disponibles pour cette liaison dans les versions 2.x et ultérieures. Les paramètres dans le fichier host.json s’appliquent à toutes les fonctions dans une instance de l’application de fonction. L’exemple de fichier host.json ci-dessous contient seulement les paramètres des versions 2.x et ultérieures pour cette liaison. Pour plus d’informations sur les paramètres de configuration de l’application de fonction dans les versions 2.x et ultérieures, consultez Référence host.json pour Azure Functions.

{
    "version": "2.0",
    "extensions": {
        "rabbitMQ": {
            "prefetchCount": 100,
            "queueName": "queue",
            "connectionString": "amqp://user:password@url:port",
            "port": 10
        }
    }
}
Propriété Default Description
prefetchCount 30 Obtient ou définit le nombre de messages que le destinataire des messages peut demander simultanément et est mis en cache.
queueName n/a Nom de la file d’attente à partir de laquelle les messages sont envoyés.
connectionString n/a Chaîne de connexion de la file d’attente de messages RabbitMQ. La chaîne de connexion est directement spécifiée ici et non via un paramètre d’application.
port 0 (ignorée si vous utilisez connectionString) 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 : 5672.

Test local

Notes

ConnectionString est prioritaire sur « hostName », « userName » et « password ». S’ils sont tous définis, connectionString remplace les deux autres.

Si vous effectuez des tests localement sans chaîne de connexion, vous devez définir le paramètre « hostName » ainsi que « userName » et « password », le cas échéant, dans la section « rabbitMQ » de host.json :

{
    "version": "2.0",
    "extensions": {
        "rabbitMQ": {
            ...
            "hostName": "localhost",
            "username": "userNameSetting",
            "password": "passwordSetting"
        }
    }
}
Propriété Default Description
hostName n/a (ignorée si vous utilisez connectionString)
Nom d’hôte de la file d’attente (par exemple : 10.26.45.210)
userName n/a (ignorée si vous utilisez connectionString)
Nom pour accéder à la file d’attente
mot de passe n/a (ignorée si vous utilisez connectionString)
Mot de passe pour accéder à la file d’attente

Activer la mise à l’échelle du runtime

Pour permettre un scale-out du déclencheur RabbitMQ sur plusieurs instances, le paramètre de supervision de la mise à l’échelle du runtime doit être activé.

Dans le portail, ce paramètre se trouve sous ConfigurationParamètres d’exécution de la fonction pour votre application de fonction.

VNETToggle

Dans l’interface CLI, vous pouvez activer la supervision de la mise à l’échelle du runtime à l’aide de la commande suivante :

az resource update -g <resource_group> -n <function_app_name>/config/web --set properties.functionsRuntimeScaleMonitoringEnabled=1 --resource-type Microsoft.Web/sites

Surveillance du point de terminaison RabbitMQ

Pour surveiller vos files d’attente et échanges pour un certain point de terminaison RabbitMQ :

  • Activez le plug-in de gestion RabbitMQ.
  • Accédez à http://{node-hostname}:15672 et connectez-vous avec votre nom d’utilisateur et votre mot de passe.

Étapes suivantes