Partager via


RedisStreamTrigger pour Azure Functions

RedisStreamTrigger lit de nouvelles entrées à partir d’un flux et expose ces éléments à la fonction.

Niveau De base Standard, Premium Enterprise, Enterprise Flash
Flux Oui Oui Oui

Important

Les déclencheurs Redis ne sont actuellement pas pris en charge par les fonctions exécutées dans le plan Consommation.

Important

Le modèle Node.js v4 pour Functions n’est pas encore pris en charge par l’extension Azure Cache pour Redis. 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.

Important

Le modèle Python v2 pour Functions n’est pas encore pris en charge par l’extension Azure Cache pour Redis. Pour plus d’informations sur le fonctionnement du modèle v2, consultez le guide du développeur Python sur Azure Functions.

Exemple

Important

Pour les fonctions .NET, il est recommandé d’utiliser le modèle de Worker isolé plutôt que le modèle in-process. Pour une comparaison des modèles worker in-process et isolés , consultez les différences entre le modèle worker isolé et le modèle in-process pour .NET sur Azure Functions.

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.
using Microsoft.Extensions.Logging;

namespace Microsoft.Azure.Functions.Worker.Extensions.Redis.Samples.RedisStreamTrigger
{
    internal class SimpleStreamTrigger
    {
        private readonly ILogger<SimpleStreamTrigger> logger;

        public SimpleStreamTrigger(ILogger<SimpleStreamTrigger> logger)
        {
            this.logger = logger;
        }

        [Function(nameof(SimpleStreamTrigger))]
        public void Run(
            [RedisStreamTrigger(Common.connectionStringSetting, "streamKey")] string entry)
        {
            logger.LogInformation(entry);
        }
    }
}

package com.function.RedisStreamTrigger;

import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.redis.annotation.*;

public class SimpleStreamTrigger {
    @FunctionName("SimpleStreamTrigger")
    public void run(
            @RedisStreamTrigger(
                name = "req",
                connection = "redisConnectionString",
                key = "streamTest",
                pollingIntervalInMs = 1000,
                maxBatchSize = 1)
                String message,
            final ExecutionContext context) {
            context.getLogger().info(message);
    }
}

Cet exemple utilise le même fichier index.js, avec des données de liaison dans le fichier function.json.

Voici le fichier index.js :

module.exports = async function (context, entry) {
    context.log(entry);
}

À partir de function.json, voici les données de liaison :

{
  "bindings": [
    {
      "type": "redisStreamTrigger",
      "connection": "redisConnectionString",
      "key": "streamTest",
      "pollingIntervalInMs": 1000,
      "maxBatchSize": 16,
      "name": "entry",
      "direction": "in"
    }
  ],
  "scriptFile": "index.js"
}

Cet exemple utilise le même fichier run.ps1, avec des données de liaison dans le fichier function.json.

Voici le fichier run.ps1 :

param($entry, $TriggerMetadata)
Write-Host ($entry | ConvertTo-Json)

À partir de function.json, voici les données de liaison :

{
  "bindings": [
    {
      "type": "redisStreamTrigger",
      "connection": "redisConnectionString",
      "key": "streamTest",
      "pollingIntervalInMs": 1000,
      "maxBatchSize": 16,
      "name": "entry",
      "direction": "in"
    }
  ],
  "scriptFile": "run.ps1"
}

Le modèle de programmation Python v1 vous oblige à définir des liaisons dans un fichier function.json distinct dans le dossier de fonction. Pour plus d’informations, consultez le guide des développeurs Python.

Cet exemple utilise le même fichier __init__.py, avec des données de liaison dans le fichier function.json.

Voici le fichier __init__.py :

import logging

def main(entry: str):
    logging.info(entry)

À partir de function.json, voici les données de liaison :

{
  "bindings": [
    {
      "type": "redisStreamTrigger",
      "connection": "redisConnectionString",
      "key": "streamTest",
      "pollingIntervalInMs": 1000,
      "maxBatchSize": 16,
      "name": "entry",
      "direction": "in"
    }
  ],
  "scriptFile": "__init__.py"
}

Attributs

Paramètres Description Obligatoire Par défaut
Connection Nom du paramètre d’application qui contient le cache chaîne de connexion, par exemple :<cacheName>.redis.cache.windows.net:6380,password... Oui
Key Clé à partir de laquelle lire. Oui
PollingIntervalInMs Fréquence d’interrogation du serveur Redis en millisecondes. Facultatif 1000
MessagesPerWorker Nombre de messages que chaque worker de fonctions doit traiter. Utilisé pour déterminer le nombre de workers à mettre à l’échelle la fonction. Facultatif 100
Count Nombre d’éléments à extraire de Redis à la fois. Facultatif 10
DeleteAfterProcess Indique si la fonction supprime les entrées de flux après le traitement. Facultatif false

Annotations

Paramètre Description Obligatoire Par défaut
name entry Oui
connection Nom du paramètre d’application qui contient le cache chaîne de connexion, par exemple :<cacheName>.redis.cache.windows.net:6380,password... Oui
key Clé à partir de laquelle lire. Oui
pollingIntervalInMs Fréquence d’interrogation de Redis en millisecondes. Facultatif 1000
messagesPerWorker Nombre de messages que chaque worker de fonctions doit traiter. Il est utilisé pour déterminer le nombre de workers à mettre à l’échelle la fonction. Facultatif 100
count Nombre d’entrées à lire à partir de Redis à la fois. Les entrées sont traitées en parallèle. Facultatif 10
deleteAfterProcess Indique s’il faut supprimer les entrées de flux après l’exécution de la fonction. Facultatif false

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és function.json Description Obligatoire Par défaut
type Oui
deleteAfterProcess Facultatif false
connection Nom du paramètre d’application qui contient le cache chaîne de connexion, par exemple :<cacheName>.redis.cache.windows.net:6380,password... Oui
key Clé à partir de laquelle lire. Oui
pollingIntervalInMs Fréquence d’interrogation de Redis en millisecondes. Facultatif 1000
messagesPerWorker (facultatif) Nombre de messages que chaque worker de fonctions doit traiter. Utilisé pour déterminer le nombre de workers auquel la fonction doit être mise à l’échelle Facultatif 100
count Nombre d’entrées à lire à partir de Redis à la fois. Celles-ci sont traitées en parallèle. Facultatif 10
name Oui
direction Oui

Pour obtenir des exemples complets, consultez la section Exemple.

Usage

La fonction Azure RedisStreamTrigger lit les nouvelles entrées à partir d’un flux et les expose à la fonction.

Le déclencheur interroge Redis à un intervalle fixe configurable et utilise XREADGROUP pour lire des éléments du flux.

Le groupe de consommateurs pour toutes les instances d’une fonction est le nom de la fonction, autrement dit, SimpleStreamTrigger pour l’exemple StreamTrigger.

Chaque instance de fonctions utilise ou WEBSITE_INSTANCE_ID génère un GUID aléatoire à utiliser comme nom de consommateur au sein du groupe pour vous assurer que les instances mises à l’échelle de la fonction ne lisent pas les mêmes messages à partir du flux.

Type Description
byte[] Message du canal.
string Message du canal.
Custom Le déclencheur utilise la sérialisation Json.NET pour mapper le message du canal d’un string à un type personnalisé.