RedisStreamTrigger per Funzioni di Azure
Legge RedisStreamTrigger
le nuove voci da un flusso e li espone alla funzione.
Livello | Di base | Standard, Premium | Enterprise, Enterprise Flash |
---|---|---|---|
Flussi | Sì | Sì | Sì |
Importante
I trigger Redis non sono attualmente supportati per le funzioni in esecuzione nel piano a consumo.
Importante
Il modello Node.js v4 per Funzioni non è ancora supportato dall'estensione cache di Azure per Redis. Per altre informazioni sul funzionamento del modello v4, vedere la guida per sviluppatori di Funzioni di Azure Node.js. Per altre informazioni sulle differenze tra v3 e v4, vedere la guida alla migrazione.
Importante
Il modello Python v2 per Funzioni non è ancora supportato dall'estensione cache di Azure per Redis. Per altre informazioni sul funzionamento del modello v2, vedere la guida per sviluppatori python Funzioni di Azure.
Esempio
Importante
Per le funzioni .NET, è consigliabile usare il modello di lavoro isolato nel modello in-process. Per un confronto tra i modelli di lavoro in-process e isolati, vedere le differenze tra il modello di lavoro isolato e il modello in-process per .NET in Funzioni di Azure.
Modello di esecuzione | Descrizione |
---|---|
Modello di lavoro isolato | Il codice della funzione viene eseguito in un processo di lavoro .NET separato. Usare con le versioni supportate di .NET e .NET Framework. Per altre informazioni, vedere Sviluppare funzioni di processo di lavoro isolato .NET. |
Modello di processo | Il codice della funzione viene eseguito nello stesso processo del processo host di Funzioni. Supporta solo versioni LTS (Long Term Support) di .NET. Per altre informazioni, vedere Sviluppare funzioni della libreria di classi .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);
}
}
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 di function.json separato 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 dell'applicazione che contiene la cache stringa di connessione, ad esempio:<cacheName>.redis.cache.windows.net:6380,password... |
Sì | |
Key |
Chiave da cui leggere. | Sì | |
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 |
Sì | |
connection |
Nome dell'impostazione dell'applicazione che contiene la cache stringa di connessione, ad esempio:<cacheName>.redis.cache.windows.net:6380,password... |
Sì | |
key |
Chiave da cui leggere. | Sì | |
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 |
Sì | ||
deleteAfterProcess |
Facoltativo | false |
|
connection |
Nome dell'impostazione dell'applicazione che contiene la cache stringa di connessione, ad esempio:<cacheName>.redis.cache.windows.net:6380,password... |
Sì | |
key |
Chiave da cui leggere. | Sì | |
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 |
Sì | ||
direction |
Sì |
Per esempi completi, vedere la sezione di esempio.
Utilizzo
La RedisStreamTrigger
funzione di Azure legge le nuove voci da un flusso e li 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, SimpleStreamTrigger
vale a dire 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 a string in un tipo personalizzato. |