RedisStreamTrigger para Azure Functions
RedisStreamTrigger
lee nuevas entradas de una secuencia y muestra esos elementos a la función.
Ámbito de disponibilidad para desencadenadores de funciones
Tipo de desencadenador | Azure Managed Redis | Azure Cache for Redis |
---|---|---|
Secuencias | Sí | Sí |
Importante
Al usar Azure Managed Redis o los niveles Enterprise de Azure Cache for Redis, use el puerto 10000 en lugar del puerto 6380 o 6379.
Importante
Los desencadenadores de Redis no se admiten actualmente para las funciones que se ejecutan en el plan de consumo.
Importante
El modelo de Node.js v4 para Functions aún no es compatible con la extensión azure Cache for Redis. Para más detalles acerca de cómo funciona el modelo v4, consulte la Guía para desarrolladores de Node.js de Azure Functions. Para obtener más información acerca de las diferencias entre v3 y v4, consulte la Guía de migración.
Importante
El modelo de Python v2 para Functions aún no es compatible con la extensión Azure Cache for Redis. Para más información sobre cómo funciona el modelo v2, consulte la Guía para desarrolladores de Python de Azure Functions.
Ejemplo
Importante
En el caso de las funciones de .NET, se recomienda usar el modelo de trabajo aislado en lugar del modelo en proceso. Para obtener una comparación de los modelos de trabajo en proceso y aislados, consulte las diferencias entre el modelo de trabajo aislado y el modelo en proceso para .NET en Azure Functions.
Modelo de ejecución | Descripción |
---|---|
Modelo de trabajo aislado | El código de función se ejecuta en un proceso de trabajo de .NET independiente. Se usa con versiones compatibles de .NET y .NET Framework. Para obtener más información, consulte Desarrollo de funciones de procesos de trabajo aislados en .NET. |
Modelo de proceso | El código de función se ejecuta en el mismo proceso que el proceso de host de Functions. Solo admite versiones de .NET de compatibilidad a largo plazo (LTS). Para obtener más información, consulte Desarrollo de funciones de la biblioteca de clases de .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);
}
}
Esta muestra usa el mismo archivo index.js
, con datos de enlace en el archivo function.json
.
Este es el archivo index.js
:
module.exports = async function (context, entry) {
context.log(entry);
}
En function.json
, estos son los datos de enlace:
{
"bindings": [
{
"type": "redisStreamTrigger",
"connection": "redisConnectionString",
"key": "streamTest",
"pollingIntervalInMs": 1000,
"maxBatchSize": 16,
"name": "entry",
"direction": "in"
}
],
"scriptFile": "index.js"
}
Esta muestra usa el mismo archivo run.ps1
, con datos de enlace en el archivo function.json
.
Este es el archivo run.ps1
:
param($entry, $TriggerMetadata)
Write-Host ($entry | ConvertTo-Json)
En function.json
, estos son los datos de enlace:
{
"bindings": [
{
"type": "redisStreamTrigger",
"connection": "redisConnectionString",
"key": "streamTest",
"pollingIntervalInMs": 1000,
"maxBatchSize": 16,
"name": "entry",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
El modelo de programación de Python v1 requiere que defina enlaces en un archivo function.json independiente en la carpeta de funciones. Para más información, consulte la Guía para desarrolladores de Python.
Esta muestra usa el mismo archivo __init__.py
, con datos de enlace en el archivo function.json
.
Este es el archivo __init__.py
:
import logging
def main(entry: str):
logging.info(entry)
En function.json
, estos son los datos de enlace:
{
"bindings": [
{
"type": "redisStreamTrigger",
"connection": "redisConnectionString",
"key": "streamTest",
"pollingIntervalInMs": 1000,
"maxBatchSize": 16,
"name": "entry",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Atributos
Parámetros | Descripción | Necesario | Valor predeterminado |
---|---|---|---|
Connection |
Nombre de la configuración de la aplicación que contiene el cadena de conexión de caché, como:<cacheName>.redis.cache.windows.net:6380,password... |
Sí | |
Key |
Clave de la que se va a leer. | Sí | |
PollingIntervalInMs |
Con qué frecuencia sondear el servidor Redis en milisegundos. | Opcionales | 1000 |
MessagesPerWorker |
Número de mensajes que cada trabajo de funciones debe procesar. Se usa para determinar cuántos trabajos debe escalar la función. | Opcionales | 100 |
Count |
Número de elementos para extraer de Redis al mismo tiempo. | Opcionales | 10 |
DeleteAfterProcess |
Indica si la función elimina las entradas de secuencia después del procesamiento. | Opcionales | false |
anotaciones
Parámetro | Descripción | Necesario | Valor predeterminado |
---|---|---|---|
name |
entry |
Sí | |
connection |
Nombre de la configuración de la aplicación que contiene el cadena de conexión de caché, como:<cacheName>.redis.cache.windows.net:6380,password... |
Sí | |
key |
Clave de la que se va a leer. | Sí | |
pollingIntervalInMs |
Con qué frecuencia sondear Redis, en milisegundos. | Opcionales | 1000 |
messagesPerWorker |
Número de mensajes que cada trabajo de funciones debe procesar. Se usa para determinar cuántos trabajos debe escalar la función. | Opcionales | 100 |
count |
Número de entradas para leer de Redis al mismo tiempo. Las entradas se procesan en paralelo. | Opcionales | 10 |
deleteAfterProcess |
Indica si se van a eliminar las entradas de secuencia después de ejecutar la función. | Opcionales | false |
Configuración
En la siguiente tabla se explican las propiedades de configuración de enlace que se establecen en el archivo function.json.
Propiedades de function.json | Descripción | Necesario | Valor predeterminado |
---|---|---|---|
type |
Sí | ||
deleteAfterProcess |
Opcionales | false |
|
connection |
Nombre de la configuración de la aplicación que contiene el cadena de conexión de caché, como:<cacheName>.redis.cache.windows.net:6380,password... |
Sí | |
key |
Clave de la que se va a leer. | Sí | |
pollingIntervalInMs |
Con qué frecuencia sondear Redis en milisegundos. | Opcionales | 1000 |
messagesPerWorker |
(opcional) Número de mensajes que cada trabajo de funciones debe procesar. Se utiliza para determinar a cuántos trabajos debe escalar la función | Opcionales | 100 |
count |
Número de entradas para leer de Redis al mismo tiempo. Estos se procesan en paralelo. | Opcionales | 10 |
name |
Sí | ||
direction |
Sí |
Consulte la sección de ejemplos para ver ejemplos completos.
Uso
La función de Azure RedisStreamTrigger
lee las entradas nuevas de una secuencia y muestra esas entradas a la función.
El desencadenador sondea Redis en un intervalo fijo configurable y usa XREADGROUP
para leer los elementos de la secuencia.
El grupo de consumidores para todas las instancias de una función es el nombre de la función, es decir, SimpleStreamTrigger
para el ejemplo StreamTrigger.
Cada instancia de funciones usa o WEBSITE_INSTANCE_ID
genera un GUID aleatorio para usarlo como su nombre de consumidor dentro del grupo para asegurarse de que las instancias escaladas horizontalmente de la función no leen los mismos mensajes de la secuencia.
Tipo | Descripción |
---|---|
byte[] |
El mensaje del canal. |
string |
El mensaje del canal. |
Custom |
El desencadenador utiliza la serialización Json.NET para asignar el mensaje del canal de string a un tipo personalizado. |