RedisStreamTrigger para Azure Functions
O RedisStreamTrigger
faz a leitura de novas entradas de um fluxo e coloca esses elementos na superfície da função.
Escopo de disponibilidade para gatilhos de funções
Tipo de gatilho | Redis Gerenciado do Azure | 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
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.
Modelo de execução | Descrição |
---|---|
Modelo de trabalho isolado | O código de função é executado em um processo de trabalho do .NET separado. Use com versões com suporte do .NET e do .NET Framework. Para saber mais, confira Desenvolver funções de processo de trabalho isolado no .NET. |
Modelo em processo | Seu código de função é executado no mesmo processo que o processo de host do Functions. Dá suporte apenas a versões LTS (suporte de longo prazo) do .NET. Para saber mais, confira Desenvolver funções de biblioteca de classes do .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 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": "redisStreamTrigger",
"connection": "redisConnectionString",
"key": "streamTest",
"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 | ConvertTo-Json)
De function.json
, aqui estão os dados de associação:
{
"bindings": [
{
"type": "redisStreamTrigger",
"connection": "redisConnectionString",
"key": "streamTest",
"pollingIntervalInMs": 1000,
"maxBatchSize": 16,
"name": "entry",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
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.
Esta amostra utiliza o mesmo arquivo __init__.py
, com dados de associação no arquivo function.json
.
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": "redisStreamTrigger",
"connection": "redisConnectionString",
"key": "streamTest",
"pollingIntervalInMs": 1000,
"maxBatchSize": 16,
"name": "entry",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Atributos
Parâmetros | 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. | 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 trabalhos a função deve ser dimensionada. | Opcional | 100 |
Count |
Número de elementos a serem extraídos do Redis de uma só vez. | Opcional | 10 |
DeleteAfterProcess |
Indica se a função exclui as entradas do fluxo após o processamento. | Opcional | false |
Anotações
Parâmetro | Descrição | Obrigatório | Padrã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 da qual fazer a leitura. | Sim | |
pollingIntervalInMs |
Com que frequência realizar a verificação no 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 fazer a leitura do Redis de uma só vez. As entradas 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 associação que você define no arquivo function.json.
Propriedades do function.json | Descrição | Obrigatório | Padrã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 fazer a leitura. | Sim | |
pollingIntervalInMs |
Com que frequência realizar a verificação no Redis, em milissegundos. | Opcional | 1000 |
messagesPerWorker |
(opcional) O número de mensagens que cada trabalhador de funções deve processar. Utilizado para determinar quantos operadores a função deve escalar | 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 |
name |
Sim | ||
direction |
Sim |
Consulte a Seção de exemplo para obter exemplos completos.
Uso
A RedisStreamTrigger
Azure Functions faz a leitura de novas entradas de um fluxo e coloca essas entradas na superfície da função.
O gatilho sonda o Redis em um intervalo fixo configurável e usa para ler elementos XREADGROUP
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 expandidas 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 disparo utiliza a serialização do Json.NET para mapear a mensagem do canal de um string em um tipo personalizado. |