Sdílet prostřednictvím


RedisPubSubTrigger pro Azure Functions

Funkce Redis publikují nebo odebírají funkce , které umožňují odesílání zpráv do Redis a vysílání odběratelům.

Další informace o triggerech a vazbách Azure Cache for Redis najdete v rozšíření Redis pro Azure Functions.

Rozsah dostupnosti pro triggery funkcí

Úroveň Basic Standard, Premium Enterprise, Enterprise Flash
Aktivační událost pub/sub Ano Ano Yes

Upozorňující

Tento trigger není v plánu consumption podporovaný, protože Redis PubSub vyžaduje, aby klienti vždy aktivně naslouchali příjmu všech zpráv. U plánů consumption může vaše funkce vynechat určité zprávy publikované v kanálu.

Důležité

Rozšíření Azure Cache for Redis zatím nepodporuje model Node.js v4 pro Functions. Další podrobnosti o tom, jak model v4 funguje, najdete v příručce pro vývojáře služby Azure Functions Node.js. Další informace o rozdílech mezi v3 a v4 najdete v průvodci migrací.

Důležité

Rozšíření Azure Cache for Redis zatím nepodporuje model Pythonu v2 pro Functions. Další podrobnosti o tom, jak model v2 funguje, najdete v příručce pro vývojáře v Pythonu pro Azure Functions.

Příklady

Model spouštění Popis
Izolovaný model pracovního procesu Kód funkce se spouští v samostatném pracovním procesu .NET. Používá se s podporovanými verzemi rozhraní .NET a .NET Framework. Další informace najdete v tématu Vývoj funkcí izolovaného pracovního procesu .NET.
Model v procesu Kód funkce se spouští ve stejném procesu jako hostitelský proces služby Functions. Podporuje pouze verze dlouhodobé podpory (LTS) rozhraní .NET. Další informace najdete v tématu Vývoj funkcí knihovny tříd .NET.

Důležité

Pro funkce .NET se doporučuje použití izolovaného modelu pracovního procesu přes model v procesu. Porovnání modelů pracovních procesů v procesu a izolovaných pracovních procesů najdete v rozdílech mezi izolovaným modelem pracovního procesu a modelem v procesu pro .NET ve službě Azure Functions.

Tato ukázka naslouchá kanálu 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);
        }
    }
}

Tato ukázka naslouchá všem oznámením o prostoru klíčů pro klíč 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);
        }
    }
}

Tato ukázka naslouchá všem keyevent oznámením pro příkaz DELdelete .

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.");
        }
    }
}

Tato ukázka naslouchá kanálu 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);
    }
}


Tato ukázka naslouchá všem oznámením o prostoru klíčů pro klíč 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);
    }
}

Tato ukázka naslouchá všem keyevent oznámením pro příkaz DELdelete .

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);
    }
}

Tato ukázka používá stejný index.js soubor s daty vazby function.json v souboru určujícím, ve kterém kanálu se aktivační událost vyskytuje.

Tady je index.js soubor:

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

Od function.json:

Tady je vazba dat pro naslouchání kanálu pubsubTest.

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "pubsubTest",
      "pattern": false,
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "index.js"
}

Tady je vazba dat pro naslouchání oznámení o prostoru klíčů pro klíč keyspaceTest.

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "__keyspace@0__:keyspaceTest",
      "pattern": false,
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "index.js"
}

Tady jsou data vazby pro naslouchání keyevent oznámení pro příkaz DELdelete .

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "__keyevent@0__:del",
      "pattern": false,
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "index.js"
}

Tato ukázka používá stejný run.ps1 soubor s daty vazby function.json v souboru určujícím, ve kterém kanálu se aktivační událost vyskytuje.

Tady je run.ps1 soubor:

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

Od function.json:

Tady je vazba dat pro naslouchání kanálu pubsubTest.

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "pubsubTest",
      "pattern": false,
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "run.ps1"
}

Tady je vazba dat pro naslouchání oznámení o prostoru klíčů pro klíč keyspaceTest.

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "__keyspace@0__:keyspaceTest",
      "pattern": false,
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "run.ps1"
}

Tady jsou data vazby pro naslouchání keyevent oznámení pro příkaz DELdelete .

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "__keyevent@0__:del",
      "pattern": false,
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "run.ps1"
}

Programovací model Pythonu v1 vyžaduje, abyste definovali vazby v samostatném souboru function.json ve složce funkce. Další informace najdete v příručce pro vývojáře Pythonu.

Tato ukázka používá stejný __init__.py soubor s daty vazby function.json v souboru určujícím, ve kterém kanálu se aktivační událost vyskytuje.

Tady je __init__.py soubor:

import logging

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

Od function.json:

Tady je vazba dat pro naslouchání kanálu pubsubTest.

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "pubsubTest",
      "pattern": false,
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "__init__.py"
}

Tady je vazba dat pro naslouchání oznámení o prostoru klíčů pro klíč keyspaceTest.

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "__keyspace@0__:keyspaceTest",
      "pattern": false,
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "__init__.py"
}

Tady jsou data vazby pro naslouchání keyevent oznámení pro příkaz DELdelete .

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "__keyevent@0__:del",
      "pattern": false,
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "__init__.py"
}

Atributy

Parametr Popis Požaduje se Výchozí
Connection Název nastavení aplikace, které obsahuje připojovací řetězec mezipaměti, například:<cacheName>.redis.cache.windows.net:6380,password... Ano
Channel Dílčí kanál pub, na který má trigger naslouchat. Podporuje vzory kanálů ve stylu globu. Toto pole lze vyřešit pomocí INameResolver. Ano

Poznámky

Parametr Popis Požaduje se Výchozí
name Název proměnné, která má hodnotu vrácenou funkcí. Ano
connection Název nastavení aplikace, které obsahuje připojovací řetězec mezipaměti, například:<cacheName>.redis.cache.windows.net:6380,password... Ano
channel Dílčí kanál pub, na který má trigger naslouchat. Podporuje vzory kanálů ve stylu globu. Ano

Konfigurace

vlastnost function.json Popis Požaduje se Výchozí
type Typ aktivační události. Pro aktivační událost pub sub je redisPubSubTriggertyp . Ano
connection Název nastavení aplikace, které obsahuje připojovací řetězec mezipaměti, například:<cacheName>.redis.cache.windows.net:6380,password... Ano
channel Název dílčího kanálu pub, ke kterému se přihlašuje odběr. Ano
pattern Logická hodnota označující daný kanál používá matematické výpočty vzorů. Pokud pattern je pravda, pak se kanál považuje za vzor ve stylu globu namísto literálu. Ano
name Název proměnné, která má hodnotu vrácenou funkcí. Ano
direction Musí být nastavena na inhodnotu . Ano

Důležité

Parametr connection neukládá mezipaměť Redis připojovací řetězec sama. Místo toho odkazuje na název proměnné prostředí, která obsahuje připojovací řetězec. Díky tomu je aplikace bezpečnější. Další informace najdete v tématu Redis připojovací řetězec.

Využití

Funkce Redis publikují nebo odebírají funkce , které umožňují odesílání zpráv do Redis a vysílání odběratelům. Služba RedisPubSubTrigger Azure Functions se aktivuje u pub/sub activity. Přihlásí RedisPubSubTriggerse k odběru konkrétního vzoru kanálu pomocí PSUBSCRIBEfunkce a zobrazí zprávy přijaté na těchto kanálech.

Předpoklady a omezení

  • Není RedisPubSubTrigger schopen naslouchat oznámením o prostoru klíčů v clusterovaných mezipamětí.
  • Funkce úrovně Basic nepodporují aktivaci keyspace nebo keyevent oznámení prostřednictvím funkce RedisPubSubTrigger.
  • Plán RedisPubSubTrigger consumption se nepodporuje, protože Redis PubSub vyžaduje, aby klienti vždy aktivně naslouchali příjmu všech zpráv. U plánů consumption může vaše funkce vynechat určité zprávy publikované v kanálu.
  • Funkce s horizontálním navýšením RedisPubSubTrigger kapacity by se neměly škálovat na více instancí. Každá instance naslouchá a zpracovává každou podřízenou zprávu pub, což vede k duplicitnímu zpracování.

Upozorňující

Tento trigger není v plánu consumption podporovaný, protože Redis PubSub vyžaduje, aby klienti vždy aktivně naslouchali příjmu všech zpráv. U plánů consumption může vaše funkce vynechat určité zprávy publikované v kanálu.

Aktivace v oznámeních o prostoru klíčů

Redis nabízí integrovaný koncept označovaný jako oznámení keyspace. Pokud je tato funkce povolená, publikuje oznámení široké škály akcí mezipaměti do vyhrazeného pub/dílčího kanálu. Mezi podporované akce patří akce, které ovlivňují konkrétní klíče, označované jako oznámení o prostoru klíčů, a konkrétní příkazy označované jako oznámení keyevent. Podporuje se obrovská řada akcí Redis, například SET, DELa EXPIRE. Úplný seznam najdete v dokumentaci k oznámení o prostoru klíčů.

Oznámení keyspace a keyevent oznámení se publikují s následující syntaxí:

PUBLISH __keyspace@0__:<affectedKey> <command>
PUBLISH __keyevent@0__:<affectedCommand> <key>

Vzhledem k tomu, že jsou tyto události publikovány v kanálech pub/sub, RedisPubSubTrigger je možné je vyzvednout. Další příklady najdete v části RedisPubSubTrigger .

Důležité

Před publikováním oznámení ve službě Azure Cache for Redis keyspace je nutné povolit události. Další informace naleznete v části Upřesnit nastavení.

Typ Popis
string Zpráva kanálu serializovaná jako JSON (UTF-8 kódovaná pro typy bajtů) ve formátu, který následuje.
Custom Trigger používá Json.NET serializace k mapování zprávy z kanálu na daný vlastní typ.

Formát řetězce JSON

{
  "SubscriptionChannel":"__keyspace@0__:*",
  "Channel":"__keyspace@0__:mykey",
  "Message":"set"
}

Typ Popis
string Zpráva kanálu serializovaná jako JSON (UTF-8 kódovaná pro typy bajtů) ve formátu, který následuje.
Custom Trigger používá Json.NET serializace k mapování zprávy z kanálu z kanálu string do vlastního typu.
{
  "SubscriptionChannel":"__keyspace@0__:*",
  "Channel":"__keyspace@0__:mykey",
  "Message":"set"
}