RedisStreamTrigger para Azure Functions (versión preliminar)

RedisStreamTrigger lee nuevas entradas de una secuencia y muestra esos elementos a la función.

Nivel Básico Estándar, Premium Enterprise o Enterprise Flash
Secuencias

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...
Key Clave de la que se va a leer.
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
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...
key Clave de la que se va a leer.
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
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...
key Clave de la que se va a leer.
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
direction

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.