Compartilhar via


RedisListTrigger para Azure Functions

O RedisListTrigger exibe novos elementos de uma lista e apresenta essas entradas para a função.

Para obter mais informações sobre gatilhos e associações do Cache do Azure para Redis, consulte Extensão do Redis para Azure Functions.

Escopo de disponibilidade para gatilhos de funções

Tipo de gatilho Redis Gerenciado do Azure Cache do Azure para Redis
Listas Sim Sim

Importante

Ao usar o Azure Managed Redis ou as camadas Enterprise do Cache do Azure para Redis, use a porta 10000 em vez da porta 6380 ou 6379.

Importante

No momento, não há suporte para os gatilhos do Redis para funções em execução no Plano de Consumo.

Importante

O modelo Node.js v4 para Functions ainda não tem suporte na extensão Cache do Azure para Redis. Para obter mais detalhes sobre como funciona o modelo v4, consulte o Guia do desenvolvedor do Node.js para o Azure Functions. Para saber mais sobre as diferenças entre os modelos v3 e a v4, consulte o Guia de migração.

Importante

O modelo Python v2 para Functions ainda não é compatível com a extensão Cache do Azure para Redis. Para obter mais detalhes sobre como funciona o modelo v2, consulte o Guia de desenvolvedor do Node.js para Azure Functions.

Exemplo

Importante

Para funções .NET, é recomendado usar o modelo de trabalho isolado em vez do modelo em processo. Para obter uma comparação dos modelos de trabalho em processo e isolados, consulte as diferenças entre o modelo de trabalho isolado e o modelo em processo para .NET no Azure Functions.

O exemplo a seguir pesquisa a chave listTest:

using Microsoft.Extensions.Logging;

namespace Microsoft.Azure.Functions.Worker.Extensions.Redis.Samples.RedisListTrigger
{
    public class SimpleListTrigger
    {
        private readonly ILogger<SimpleListTrigger> logger;

        public SimpleListTrigger(ILogger<SimpleListTrigger> logger)
        {
            this.logger = logger;
        }

        [Function(nameof(SimpleListTrigger))]
        public void Run(
            [RedisListTrigger(Common.connectionStringSetting, "listTest")] string entry)
        {
            logger.LogInformation(entry);
        }
    }
}

O exemplo a seguir sonda a chave listTest em uma instância do Redis localhost em redisLocalhost:

package com.function.RedisListTrigger;

import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.redis.annotation.*;

public class SimpleListTrigger {
    @FunctionName("SimpleListTrigger")
    public void run(
            @RedisListTrigger(
                name = "req",
                connection = "redisConnectionString",
                key = "listTest",
                pollingIntervalInMs = 1000,
                maxBatchSize = 1)
                String message,
            final ExecutionContext context) {
            context.getLogger().info(message);
    }
}

Esta amostra utiliza o mesmo arquivo index.js, com dados de associação no arquivo function.json.

Aqui está o arquivo index.js:

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

De function.json, aqui estão os dados de associação:

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

Esta amostra utiliza o mesmo arquivo run.ps1, com dados de associação no arquivo function.json.

Aqui está o arquivo run.ps1:

param($entry, $TriggerMetadata)
Write-Host $entry

De function.json, aqui estão os dados de associação:

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

Esta amostra utiliza o mesmo arquivo __init__.py, com dados de associação no arquivo function.json.

O modelo de programação v1 do Python requer que você defina as associações em um arquivo function.json separado na pasta de funções. Para saber mais, confira o Guia do desenvolvedor do Python.

Aqui está o arquivo __init__.py:

import logging

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

De function.json, aqui estão os dados de associação:

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

Atributos

Parâmetro Descrição Obrigatório Padrão
Connection O nome da configuração do aplicativo que contém a cadeia de conexão de cache, como:<cacheName>.redis.cache.windows.net:6380,password... Sim
Key Chave da qual fazer a leitura. Esse campo pode ser resolvido por meio de INameResolver. Sim
PollingIntervalInMs Com que frequência realizar a verificação no Redis, em milissegundos. Opcional 1000
MessagesPerWorker Quantas mensagens cada instância de funções deve processar. Usado para determinar para quantas instâncias a função deve ser dimensionada. Opcional 100
Count Número de entradas a serem exibidas do Redis ao mesmo tempo. As entradas são processadas em paralelo. Compatível apenas com o Redis 6.2+ usando o argumento COUNT em LPOP e RPOP. Opcional 10
ListPopFromBeginning Determina se exibe elementos do início usando LPOP ou exibe elementos do final usando RPOP. Opcional true

Anotações

Parâmetro Descrição Obrigatório Padrão
name "entrada"
connection O nome da configuração do aplicativo que contém a cadeia de conexão de cache, como:<cacheName>.redis.cache.windows.net:6380,password... Sim
key Esse campo pode ser resolvido usando INameResolver. Sim
pollingIntervalInMs Com que frequência realizar a verificação no Redis, em milissegundos. Opcional 1000
messagesPerWorker Quantas mensagens cada instância de funções deve processar. Usado para determinar para quantas instâncias a função deve ser dimensionada. Opcional 100
count Número de entradas para fazer a leitura do Redis de uma só vez. Eles são processados em paralelo. Opcional 10
listPopFromBeginning Se as entradas de fluxo devem ser excluídas após a execução da função. Sim true

Configuração

A tabela a seguir explica as propriedades de configuração de associação que você define no arquivo function.json.

Propriedade function.json Descrição Opcional Padrão
type Nome do gatilho. Não
listPopFromBeginning Se as entradas de fluxo devem ser excluídas após a execução da função. Defina como true. Sim true
connection O nome da configuração do aplicativo que contém a cadeia de conexão de cache, como:<cacheName>.redis.cache.windows.net:6380,password... Não
key Esse campo pode ser resolvido por meio de INameResolver. Não
pollingIntervalInMs Com que frequência realizar a verificação no Redis, em milissegundos. Sim 1000
messagesPerWorker Quantas mensagens cada instância de funções deve processar. Usado para determinar para quantas instâncias a função deve ser dimensionada. Sim 100
count Número de entradas a serem lidas pelo cache de uma só vez. As entradas são processadas em paralelo. Sim 10
name ? Sim
direction Defina como in. Não

Consulte a Seção de exemplo para obter exemplos completos.

Uso

O RedisListTrigger exibe novos elementos de uma lista e apresenta essas entradas para a função. O gatilho pesquisa o Redis em um intervalo fixo configurável e usa LPOP e RPOP para exibir entradas das listas.

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