Partilhar via


RedisStreamTrigger para 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 Cache do Azure para Redis
Fluxos 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

Atualmente, os gatilhos Redis não são suportados para funções em execução no plano de consumo.

Importante

O modelo Node.js v4 para Functions ainda não é suportado pela extensão Cache do Azure para Redis. Para obter mais detalhes sobre como o modelo v4 funciona, consulte o Guia do desenvolvedor do 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 Functions ainda não é suportado pela extensão Cache for Redis do Azure. Para obter mais detalhes sobre como o modelo v2 funciona, consulte o guia do desenvolvedor Python do Azure Functions.

Exemplo

Importante

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

Modelo de execução Description
Modelo de trabalhador isolado Seu código de função é executado em um processo de trabalho .NET separado. Use com versões suportadas do .NET e .NET Framework. Para saber mais, consulte Desenvolver funções de processo de trabalho isoladas do .NET.
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 LTS (Long Term Support) do .NET. Para saber mais, consulte Desenvolver funções de biblioteca de classes .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);
    }
}

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 requer que você defina ligações em um arquivo function.json separado na pasta de funções. Para obter mais informações, consulte o guia do desenvolvedor do 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 Description Necessário Predefiniçã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 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 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 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 Description Necessário Predefinição
type Sim
deleteAfterProcess Opcional false
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 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 RedisStreamTrigger Função do Azure lê novas entradas de um fluxo e exibe essas entradas para a função.

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

O grupo de consumidores para todas as instâncias de uma função é o nome da função, ou seja, SimpleStreamTrigger para o exemplo 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 Description
byte[] A mensagem do canal.
string A mensagem do canal.
Custom O gatilho usa Json.NET serialização para mapear a mensagem do canal de um string para um tipo personalizado.