Condividi tramite


RedisStreamTrigger per Azure Functions

Legge RedisStreamTrigger le nuove voci da un flusso e li espone alla funzione.

Ambito della disponibilità per i trigger di funzioni

Tipo di trigger Azure Redis gestito Azure Cache for Redis
Flussi

Importante

Quando si usa Azure Redis gestito o i livelli Enterprise di Azure Cache for Redis, usare la porta 10000 anziché la porta 6380 o 6379.

Importante

I trigger Redis non sono attualmente supportati per le funzioni in esecuzione in un piano a consumo o in un piano a consumo flessibile.

Importante

Il modello Node.js v4 per Funzioni non è ancora supportato dall'estensione Azure Cache for Redis. Per altre informazioni sul funzionamento del modello v4, vedere la guida per sviluppatori Azure Functions Node.js. Altre informazioni sulle differenze tra i modelli v3 e v4 sono disponibili nella guida alla migrazione.

Importante

Il modello Python v2 per Funzioni non è ancora supportato dall'estensione Azure Cache for Redis. Per altre informazioni sul funzionamento del modello v2, vedere la guida per sviluppatori Azure Functions Python.

Esempio

Importante

Per le funzioni di .NET, è consigliabile usare il modello nel modello in-process>. Per un confronto tra i modelli in-process e isolated worker, vedere le differenze tra il modello isolated worker e il modello in-process per .NET su Azure Functions.

Modello di esecuzione Descrizione
Modello di lavoro isolato Il codice della funzione viene eseguito in un processo di lavoro .NET separato. Usare con versioni supportate di .NET e .NET Framework. Per altre informazioni, vedere Guide per l'esecuzione di Azure Functions C# nel modello di lavoro isolato.
Modello di processo Il codice della funzione viene eseguito nello stesso processo del processo host di Funzioni. Supporta solo le versioni Long Term Support (LTS) di .NET. Per altre informazioni, vedere funzioni della libreria di classi Develop C# usando Azure Functions.
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);
    }
}

In questo esempio viene usato lo stesso index.js file, con i dati di associazione nel function.json file.

Ecco il index.js file:

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

Da function.json, ecco i dati di associazione:

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

In questo esempio viene usato lo stesso run.ps1 file, con i dati di associazione nel function.json file.

Ecco il run.ps1 file:

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

Da function.json, ecco i dati di associazione:

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

Il modello di programmazione Python v1 richiede di definire associazioni in un file separato function.json nella cartella della funzione. Per altre informazioni, vedere la guida per sviluppatori Python.

In questo esempio viene usato lo stesso __init__.py file, con i dati di associazione nel function.json file.

Ecco il __init__.py file:

import logging

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

Da function.json, ecco i dati di associazione:

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

Attributi

Parametri Descrizione Richiesto Valore predefinito
Connection Nome dell'impostazione application che contiene il connection string della cache, ad esempio: <cacheName>.redis.cache.windows.net:6380,password...
Key Chiave da cui leggere.
PollingIntervalInMs Frequenza con cui eseguire il polling del server Redis in millisecondi. Facoltativo 1000
MessagesPerWorker Numero di messaggi che ogni ruolo di lavoro delle funzioni deve elaborare. Usato per determinare il numero di ruoli di lavoro a cui la funzione deve essere ridimensionata. Facoltativo 100
Count Numero di elementi da estrarre da Redis contemporaneamente. Facoltativo 10
DeleteAfterProcess Indica se la funzione elimina le voci del flusso dopo l'elaborazione. Facoltativo false

Annotazioni

Parametro Descrizione Richiesto Valore predefinito
name entry
connection Nome dell'impostazione application che contiene il connection string della cache, ad esempio: <cacheName>.redis.cache.windows.net:6380,password...
key Chiave da cui leggere.
pollingIntervalInMs Frequenza con cui eseguire il polling di Redis, espresso in millisecondi. Facoltativo 1000
messagesPerWorker Numero di messaggi che ogni ruolo di lavoro delle funzioni deve elaborare. Viene usato per determinare il numero di ruoli di lavoro su cui deve essere ridimensionata la funzione. Facoltativo 100
count Numero di voci da leggere da Redis contemporaneamente. Le voci vengono elaborate in parallelo. Facoltativo 10
deleteAfterProcess Indica se eliminare le voci del flusso dopo l'esecuzione della funzione. Facoltativo false

Impostazione

Nella tabella seguente sono illustrate le proprietà di configurazione dell'associazione impostate nel file function.json.

proprietà function.json Descrizione Richiesto Valore predefinito
type
deleteAfterProcess Facoltativo false
connection Nome dell'impostazione application che contiene il connection string della cache, ad esempio: <cacheName>.redis.cache.windows.net:6380,password...
key Chiave da cui leggere.
pollingIntervalInMs Frequenza con cui eseguire il polling di Redis in millisecondi. Facoltativo 1000
messagesPerWorker (facoltativo) Numero di messaggi che ogni ruolo di lavoro delle funzioni deve elaborare. Usato per determinare il numero di ruoli di lavoro che la funzione deve ridimensionare Facoltativo 100
count Numero di voci da leggere da Redis contemporaneamente. Tali elementi vengono elaborati in parallelo. Facoltativo 10
name
direction

Per esempi completi, vedere la sezione di esempio.

Utilizzo

La funzione RedisStreamTrigger Azure legge le nuove voci da un flusso e le espone alla funzione.

Il trigger esegue il polling di Redis a un intervallo fisso configurabile e usa XREADGROUP per leggere gli elementi provenienti dal flusso.

Il gruppo di consumer per tutte le istanze di una funzione è il nome della funzione, ovvero SimpleStreamTrigger per l'esempio StreamTrigger.

Ogni istanza di funzioni usa WEBSITE_INSTANCE_ID o genera un GUID casuale da usare come nome consumer all'interno del gruppo per garantire che le istanze con scalabilità orizzontale della funzione non leggano gli stessi messaggi dal flusso.

Tipo Descrizione
byte[] Messaggio dal canale.
string Messaggio dal canale.
Custom Il trigger usa Json.NET serializzazione per eseguire il mapping del messaggio dal canale da un string a un tipo personalizzato.