Partilhar via


RedisStreamTrigger for Azure Functions

O RedisStreamTrigger lê novas entradas de um fluxo e apresenta esses elementos para a função.

Âmbito de disponibilidade para acionadores de funções

Trigger Type (Tipo de Acionador) Azure Managed Redis Azure Cache for Redis
Fluxos Sim Sim

Importante

Ao usar o Azure Managed Redis ou os níveis Enterprise do Azure Cache for Redis, use a porta 10000 em vez da porta 6380 ou 6379.

Importante

Atualmente, os gatilhos Redis não são suportados para funções executadas em um plano de consumo ou em um plano de consumo flexível.

Importante

O modelo Node.js v4 para Funções ainda não é suportado pela extensão Azure Cache for Redis. Para mais detalhes sobre como funciona o modelo v4, consulte o guia para desenvolvedores Azure Functions Node.js. Para saber mais sobre as diferenças entre v3 e v4, consulte o guia de migração.

Importante

O modelo Python v2 para Funções ainda não é suportado pela extensão Azure Cache for Redis. Para mais detalhes sobre como funciona o modelo v2, consulte o guia para desenvolvedores Azure Functions Python.

Exemplo

Importante

Para funções .NET, recomenda-se o uso do modelo worker em vez do modelo in-process. Para uma comparação dos modelos in-process e isolated worker, veja as diferenças entre o modelo isolated worker e o modelo in-process para .NET em Azure Functions.

Modelo de execução Descrição
Modelo de trabalhador isolado O teu código de função corre num processo de trabalho .NET separado. Use com versões suportadas de .NET e .NET Framework. Para saber mais, consulte Guide para executar C# Azure Functions no modelo de trabalhador isolado.
Modelo em processo Seu código de função é executado no mesmo processo que o processo de host de funções. Suporta apenas versões Long Term Support (LTS) do .NET. Para saber mais, consulte Desenvolver funções de biblioteca de classes 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);
    }
}

Este exemplo usa o mesmo index.js arquivo, com dados de vinculação no function.json arquivo.

Aqui está o index.js arquivo:

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

A partir de function.json, aqui estão os dados de vinculação:

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

Este exemplo usa o mesmo run.ps1 arquivo, com dados de vinculação no function.json arquivo.

Aqui está o run.ps1 arquivo:

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

A partir de function.json, aqui estão os dados de vinculação:

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

O modelo de programação Python v1 exige que definas bindings num ficheiro separado function.json na pasta de funções. Para mais informações, consulte o guia para desenvolvedores Python.

Este exemplo usa o mesmo __init__.py arquivo, com dados de vinculação no function.json arquivo.

Aqui está o __init__.py arquivo:

import logging

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

A partir de function.json, aqui estão os dados de vinculação:

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

Atributos

Parâmetros Descrição Necessário Predefinição
Connection O nome da definição application que contém o connection string de cache, tais como: <cacheName>.redis.cache.windows.net:6380,password... Sim
Key Chave para ler. Sim
PollingIntervalInMs Com que frequência sondar o servidor Redis em milissegundos. Opcional 1000
MessagesPerWorker O número de mensagens que cada trabalhador de funções deve processar. Usado para determinar para quantos trabalhadores a função deve ser dimensionada. Opcional 100
Count Número de elementos a serem extraídos do Redis ao mesmo tempo. Opcional 10
DeleteAfterProcess Indica se a função exclui as entradas de fluxo após o processamento. Opcional false

Anotações

Parâmetro Descrição Necessário Predefinição
name entry Sim
connection O nome da definição application que contém o connection string de cache, tais como: <cacheName>.redis.cache.windows.net:6380,password... Sim
key Chave para ler. Sim
pollingIntervalInMs Com que frequência sondar Redis, em milissegundos. Opcional 1000
messagesPerWorker O número de mensagens que cada trabalhador de funções deve processar. Ele é usado para determinar para quantos trabalhadores a função deve ser dimensionada. Opcional 100
count Número de entradas para ler do Redis ao mesmo tempo. As inscrições são processadas em paralelo. Opcional 10
deleteAfterProcess Se as entradas de fluxo devem ser excluídas após a execução da função. Opcional false

Configuração

A tabela a seguir explica as propriedades de configuração de vinculação definidas no arquivo function.json.

function.json Propriedades Descrição Necessário Predefinição
type Sim
deleteAfterProcess Opcional false
connection O nome da definição application que contém o connection string de cache, tais como: <cacheName>.redis.cache.windows.net:6380,password... Sim
key A chave para ler. Sim
pollingIntervalInMs Com que frequência sondar Redis em milissegundos. Opcional 1000
messagesPerWorker (facultativo) O número de mensagens que cada trabalhador de funções deve processar. Usado para determinar quantos trabalhadores a função deve escalar Opcional 100
count Número de entradas para ler do Redis ao mesmo tempo. Estes são processados em paralelo. Opcional 10
name Sim
direction Sim

Consulte a seção Exemplo para obter exemplos completos.

Utilização

A Função RedisStreamTrigger Azure lê novas entradas de um fluxo e apresenta essas entradas à função.

O gatilho sonda Redis em um intervalo fixo configurável e usa XREADGROUP para ler elementos do fluxo.

O grupo consumidor para todas as instâncias de uma função é o nome da função, ou seja, SimpleStreamTrigger para a amostra StreamTrigger.

Cada instância de funções usa o WEBSITE_INSTANCE_ID ou gera um GUID aleatório para usar como seu nome de consumidor dentro do grupo para garantir que as instâncias dimensionadas da função não leiam as mesmas mensagens do fluxo.

Tipo Descrição
byte[] A mensagem do canal.
string A mensagem do canal.
Custom O gatilho utiliza a serialização Json.NET para mapear a mensagem do canal de um string para um tipo personalizado.