RedisPubSubTrigger para Azure Functions
O Redis possui a funcionalidade de publicação/assinatura que permite que as mensagens sejam enviadas para o Redis e transmitidas aos assinantes.
Para obter mais informações sobre gatilhos e associações do Cache do Azure para Redis, a Extensão do Redis para Azure Functions.
Âmbito de disponibilidade para acionadores de funções
Trigger Type (Tipo de Acionador) | Azure Managed Redis | Cache do Azure para Redis |
---|---|---|
Pub/Sub Gatilho | 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.
Aviso
Esse gatilho não é suportado em um plano de consumo porque o Redis PubSub exige que os clientes estejam sempre ouvindo ativamente para receber todas as mensagens. Para planos de consumo, sua função pode perder determinadas mensagens publicadas no canal.
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.
Exemplos
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. |
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.
Este exemplo ouve o canal pubsubTest
.
using Microsoft.Extensions.Logging;
namespace Microsoft.Azure.Functions.Worker.Extensions.Redis.Samples.RedisPubSubTrigger
{
internal class SimplePubSubTrigger
{
private readonly ILogger<SimplePubSubTrigger> logger;
public SimplePubSubTrigger(ILogger<SimplePubSubTrigger> logger)
{
this.logger = logger;
}
[Function(nameof(SimplePubSubTrigger))]
public void Run(
[RedisPubSubTrigger(Common.connectionStringSetting, "pubsubTest")] string message)
{
logger.LogInformation(message);
}
}
}
Este exemplo escuta todas as notificações de espaço de chave para a chave keyspaceTest
.
using Microsoft.Extensions.Logging;
namespace Microsoft.Azure.Functions.Worker.Extensions.Redis.Samples.RedisPubSubTrigger
{
internal class KeyspaceTrigger
{
private readonly ILogger<KeyspaceTrigger> logger;
public KeyspaceTrigger(ILogger<KeyspaceTrigger> logger)
{
this.logger = logger;
}
[Function(nameof(KeyspaceTrigger))]
public void Run(
[RedisPubSubTrigger(Common.connectionStringSetting, "__keyspace@0__:keyspaceTest")] string message)
{
logger.LogInformation(message);
}
}
}
Este exemplo escuta todas keyevent
as notificações para o comando DEL
delete .
using Microsoft.Extensions.Logging;
namespace Microsoft.Azure.Functions.Worker.Extensions.Redis.Samples.RedisPubSubTrigger
{
internal class KeyeventTrigger
{
private readonly ILogger<KeyeventTrigger> logger;
public KeyeventTrigger(ILogger<KeyeventTrigger> logger)
{
this.logger = logger;
}
[Function(nameof(KeyeventTrigger))]
public void Run(
[RedisPubSubTrigger(Common.connectionStringSetting, "__keyevent@0__:del")] string message)
{
logger.LogInformation($"Key '{message}' deleted.");
}
}
}
Este exemplo ouve o canal pubsubTest
.
package com.function.RedisPubSubTrigger;
import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.redis.annotation.*;
public class SimplePubSubTrigger {
@FunctionName("SimplePubSubTrigger")
public void run(
@RedisPubSubTrigger(
name = "req",
connection = "redisConnectionString",
channel = "pubsubTest",
pattern = false)
String message,
final ExecutionContext context) {
context.getLogger().info(message);
}
}
Este exemplo escuta todas as notificações de espaço de chave para a chave myKey
.
package com.function.RedisPubSubTrigger;
import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.redis.annotation.*;
public class KeyspaceTrigger {
@FunctionName("KeyspaceTrigger")
public void run(
@RedisPubSubTrigger(
name = "req",
connection = "redisConnectionString",
channel = "__keyspace@0__:keyspaceTest",
pattern = false)
String message,
final ExecutionContext context) {
context.getLogger().info(message);
}
}
Este exemplo escuta todas keyevent
as notificações para o comando DEL
delete .
package com.function.RedisPubSubTrigger;
import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.redis.annotation.*;
public class KeyeventTrigger {
@FunctionName("KeyeventTrigger")
public void run(
@RedisPubSubTrigger(
name = "req",
connection = "redisConnectionString",
channel = "__keyevent@0__:del",
pattern = false)
String message,
final ExecutionContext context) {
context.getLogger().info(message);
}
}
Este exemplo usa o mesmo index.js
arquivo, com dados de vinculação no arquivo determinando em qual canal o gatilho function.json
ocorre.
Aqui está o index.js
arquivo:
module.exports = async function (context, message) {
context.log(message);
}
De function.json
:
Aqui está a vinculação de dados para ouvir o canal pubsubTest
.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
Aqui estão os dados de vinculação para ouvir as notificações de espaço de chave para a chave keyspaceTest
.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
Aqui está a vinculação de dados para ouvir keyevent
notificações para o comando DEL
delete .
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
Este exemplo usa o mesmo run.ps1
arquivo, com dados de vinculação no arquivo determinando em qual canal o gatilho function.json
ocorre.
Aqui está o run.ps1
arquivo:
param($message, $TriggerMetadata)
Write-Host $message
De function.json
:
Aqui está a vinculação de dados para ouvir o canal pubsubTest
.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
Aqui estão os dados de vinculação para ouvir as notificações de espaço de chave para a chave keyspaceTest
.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
Aqui está a vinculação de dados para ouvir keyevent
notificações para o comando DEL
delete .
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"name": "message",
"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 arquivo determinando em qual canal o gatilho function.json
ocorre.
Aqui está o __init__.py
arquivo:
import logging
def main(message: str):
logging.info(message)
De function.json
:
Aqui está a vinculação de dados para ouvir o canal pubsubTest
.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Aqui estão os dados de vinculação para ouvir as notificações de espaço de chave para a chave keyspaceTest
.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Aqui está a vinculação de dados para ouvir keyevent
notificações para o comando DEL
delete .
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Atributos
Parâmetro | Descrição | 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 | |
Channel |
O subcanal pub que o gatilho deve ouvir. Suporta padrões de canal no estilo glob. Este campo pode ser resolvido usando INameResolver . |
Sim |
Anotações
Parâmetro | Descrição | Necessário | Predefinição |
---|---|---|---|
name |
Nome da variável que contém o valor retornado pela função. | 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 | |
channel |
O subcanal pub que o gatilho deve ouvir. Suporta padrões de canal no estilo glob. | Sim |
Configuração
function.json propriedade | Description | Necessário | Predefinição |
---|---|---|---|
type |
Tipo de gatilho. Para o subgatilho pub, o tipo é redisPubSubTrigger . |
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 | |
channel |
Nome do subcanal pub que está sendo assinado. | Sim | |
pattern |
Um booleano para indicar o canal dado usa correspondência de padrões. Se pattern for verdade, então o canal é tratado como um padrão de estilo glob em vez de como um literal. |
Sim | |
name |
Nome da variável que contém o valor retornado pela função. | Sim | |
direction |
Deve ser definido como in . |
Sim |
Importante
O connection
parâmetro não contém a cadeia de conexão de cache Redis em si. Em vez disso, ele aponta para o nome da variável de ambiente que contém a cadeia de conexão. Isso torna o aplicativo mais seguro. Para obter mais informações, consulte Cadeia de conexão Redis.
Utilização
O Redis possui a funcionalidade de publicação/assinatura que permite que as mensagens sejam enviadas para o Redis e transmitidas aos assinantes. O RedisPubSubTrigger
permite que o Azure Functions seja acionado na atividade pub/sub. O RedisPubSubTrigger
assina um padrão de canal específico usando PSUBSCRIBE
, e exibe mensagens recebidas nesses canais para a função.
Pré-requisitos e limitações
- O
RedisPubSubTrigger
não é capaz de ouvir notificações de espaço de chave em caches clusterizados. - As funções básicas da camada não suportam acionamento
keyspace
oukeyevent
notificações por meio doRedisPubSubTrigger
. - O
RedisPubSubTrigger
não é suportado em um plano de consumo porque o Redis PubSub exige que os clientes estejam sempre ouvindo ativamente para receber todas as mensagens. Para planos de consumo, sua função pode perder determinadas mensagens publicadas no canal. - As funções com o
RedisPubSubTrigger
não devem ser dimensionadas para várias instâncias. Cada instância escuta e processa cada submensagem pub, resultando em processamento duplicado.
Aviso
Esse gatilho não é suportado em um plano de consumo porque o Redis PubSub exige que os clientes estejam sempre ouvindo ativamente para receber todas as mensagens. Para planos de consumo, sua função pode perder determinadas mensagens publicadas no canal.
Acionamento em notificações de espaço de chave
O Redis oferece um conceito integrado chamado notificações keyspace. Quando ativado, esse recurso publica notificações de uma ampla gama de ações de cache em um pub/subcanal dedicado. As ações suportadas incluem ações que afetam chaves específicas, chamadas notificações keyspace, e comandos específicos, chamadas notificações keyevent. Uma grande variedade de ações Redis são apoiadas, como SET
, DEL
e EXPIRE
. A lista completa pode ser encontrada na documentação de notificação do keyspace.
As keyspace
notificações e keyevent
são publicadas com a seguinte sintaxe:
PUBLISH __keyspace@0__:<affectedKey> <command>
PUBLISH __keyevent@0__:<affectedCommand> <key>
Como esses eventos são publicados em pubs / subcanais, o RedisPubSubTrigger
é capaz de pegá-los. Consulte a seção RedisPubSubTrigger para obter mais exemplos.
Importante
No Cache do Azure para Redis, keyspace
os eventos devem ser habilitados antes que as notificações sejam publicadas. Para obter mais informações, consulte Configurações avançadas.
Tipo | Description |
---|---|
string |
A mensagem do canal serializada como JSON (UTF-8 codificado para tipos de byte) no formato a seguir. |
Custom |
O gatilho usa Json.NET serialização para mapear a mensagem do canal para o tipo personalizado fornecido. |
Formato de cadeia de caracteres JSON
{
"SubscriptionChannel":"__keyspace@0__:*",
"Channel":"__keyspace@0__:mykey",
"Message":"set"
}
Tipo | Description |
---|---|
string |
A mensagem do canal serializada como JSON (UTF-8 codificado para tipos de byte) no formato a seguir. |
Custom |
O gatilho usa Json.NET serialização para mapear a mensagem do canal de um string para um tipo personalizado. |
{
"SubscriptionChannel":"__keyspace@0__:*",
"Channel":"__keyspace@0__:mykey",
"Message":"set"
}