Udostępnij za pośrednictwem


RedisPubSubTrigger dla usługi Azure Functions

Funkcje publikowania/subskrybowania usługi Redis, które umożliwiają wysyłanie komunikatów do usługi Redis i emisję do subskrybentów.

Aby uzyskać więcej informacji na temat wyzwalaczy i powiązań usługi Azure Cache for Redis, rozszerzenie redis dla usługi Azure Functions.

Zakres dostępności wyzwalaczy funkcji

Typ wyzwalacza Azure Managed Redis Azure Cache for Redis
Wyzwalacz Pub/Sub Tak Tak

Ważne

W przypadku korzystania z usługi Azure Managed Redis lub warstw Enterprise usługi Azure Cache for Redis użyj portu 10000, a nie portu 6380 lub 6379.

Ostrzeżenie

Ten wyzwalacz nie jest obsługiwany w planie zużycia, ponieważ usługa Redis PubSub wymaga, aby klienci zawsze aktywnie słuchali wszystkich komunikatów. W przypadku planów zużycia funkcja może przegapić niektóre komunikaty opublikowane w kanale.

Ważne

Model Node.js w wersji 4 dla usługi Functions nie jest jeszcze obsługiwany przez rozszerzenie usługi Azure Cache for Redis. Aby uzyskać więcej informacji na temat sposobu działania modelu w wersji 4, zapoznaj się z przewodnikiem dewelopera dotyczącym usługi Azure Functions Node.js. Aby dowiedzieć się więcej o różnicach między wersjami 3 i v4, zapoznaj się z przewodnikiem migracji.

Ważne

Model języka Python w wersji 2 dla usługi Functions nie jest jeszcze obsługiwany przez rozszerzenie usługi Azure Cache for Redis. Aby uzyskać więcej informacji na temat sposobu działania modelu w wersji 2, zapoznaj się z przewodnikiem dla deweloperów języka Python usługi Azure Functions.

Przykłady

Model wykonania opis
Model izolowanego procesu roboczego Kod funkcji jest uruchamiany w osobnym procesie roboczym platformy .NET. Używaj z obsługiwanymi wersjami platform .NET i .NET Framework. Aby dowiedzieć się więcej, zobacz Develop .NET isolated worker process functions (Tworzenie izolowanych funkcji procesów roboczych platformy .NET).
Model w procesie Kod funkcji jest uruchamiany w tym samym procesie co proces hosta usługi Functions. Obsługuje tylko wersje long term support (LTS) platformy .NET. Aby dowiedzieć się więcej, zobacz Tworzenie funkcji biblioteki klas platformy .NET.

Ważne

W przypadku funkcji platformy .NET używanie izolowanego modelu procesu roboczego jest zalecane w modelu w procesie. Aby zapoznać się z porównaniem modeli procesów procesowych i izolowanych procesów roboczych, zobacz różnice między izolowanym modelem procesu roboczego a modelem procesu dla platformy .NET w usłudze Azure Functions.

Ten przykład nasłuchuje kanału 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);
        }
    }
}

W tym przykładzie nasłuchuje wszelkich powiadomień dotyczących przestrzeni kluczy dla klucza 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);
        }
    }
}

W tym przykładzie nasłuchuje wszelkich keyevent powiadomień dotyczących polecenia 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.");
        }
    }
}

Ten przykład nasłuchuje kanału 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);
    }
}


W tym przykładzie nasłuchuje wszelkich powiadomień dotyczących przestrzeni kluczy dla klucza 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);
    }
}

W tym przykładzie nasłuchuje wszelkich keyevent powiadomień dotyczących polecenia 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);
    }
}

W tym przykładzie użyto tego samego index.js pliku z danymi powiązania w function.json pliku określającym, w którym kanale występuje wyzwalacz.

index.js Oto plik:

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

Z elementu function.json:

Oto powiązanie danych do nasłuchiwania kanału pubsubTest.

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

Poniżej przedstawiono powiązanie danych w celu nasłuchiwania powiadomień o przestrzeni kluczy dla klucza keyspaceTest.

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

Poniżej przedstawiono powiązanie danych, aby nasłuchiwać keyevent powiadomień dotyczących polecenia DELusuwania .

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

W tym przykładzie użyto tego samego run.ps1 pliku z danymi powiązania w function.json pliku określającym, w którym kanale występuje wyzwalacz.

run.ps1 Oto plik:

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

Z elementu function.json:

Oto powiązanie danych do nasłuchiwania kanału pubsubTest.

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

Poniżej przedstawiono powiązanie danych w celu nasłuchiwania powiadomień o przestrzeni kluczy dla klucza keyspaceTest.

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

Poniżej przedstawiono powiązanie danych, aby nasłuchiwać keyevent powiadomień dotyczących polecenia DELusuwania .

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

Model programowania w języku Python w wersji 1 wymaga zdefiniowania powiązań w osobnym pliku function.json w folderze funkcji. Aby uzyskać więcej informacji, zobacz przewodnik dla deweloperów języka Python.

W tym przykładzie użyto tego samego __init__.py pliku z danymi powiązania w function.json pliku określającym, w którym kanale występuje wyzwalacz.

__init__.py Oto plik:

import logging

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

Z elementu function.json:

Oto powiązanie danych do nasłuchiwania kanału pubsubTest.

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

Poniżej przedstawiono powiązanie danych w celu nasłuchiwania powiadomień o przestrzeni kluczy dla klucza keyspaceTest.

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

Poniżej przedstawiono powiązanie danych, aby nasłuchiwać keyevent powiadomień dotyczących polecenia DELusuwania .

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

Atrybuty

Parametr opis Wymagani Wartość domyślna
Connection Nazwa ustawienia aplikacji, które zawiera parametry połączenia pamięci podręcznej, takie jak:<cacheName>.redis.cache.windows.net:6380,password... Tak
Channel Kanał podrzędny pubu, na który powinien nasłuchiwać wyzwalacz. Obsługuje wzorce kanałów w stylu globu. To pole można rozpoznać przy użyciu polecenia INameResolver. Tak

Adnotacje

Parametr opis Wymagani Wartość domyślna
name Nazwa zmiennej zawierającej wartość zwracaną przez funkcję. Tak
connection Nazwa ustawienia aplikacji, które zawiera parametry połączenia pamięci podręcznej, takie jak:<cacheName>.redis.cache.windows.net:6380,password... Tak
channel Kanał podrzędny pubu, na który powinien nasłuchiwać wyzwalacz. Obsługuje wzorce kanałów w stylu globu. Tak

Konfigurowanie

właściwość function.json opis Wymagani Wartość domyślna
type Typ wyzwalacza. W przypadku wyzwalacza podrzędnego pub typ to redisPubSubTrigger. Tak
connection Nazwa ustawienia aplikacji, które zawiera parametry połączenia pamięci podręcznej, takie jak:<cacheName>.redis.cache.windows.net:6380,password... Tak
channel Nazwa podkanałowego kanału pubu, który jest subskrybowany. Tak
pattern Wartość logiczna wskazująca, że dany kanał używa dopasowania wzorca. Jeśli pattern ma wartość true, kanał jest traktowany jak wzorzec w stylu globu , a nie jako literał. Tak
name Nazwa zmiennej zawierającej wartość zwracaną przez funkcję. Tak
direction Musi być ustawiona wartość in. Tak

Ważne

Parametr connection nie przechowuje parametry połączenia pamięci podręcznej Redis Cache. Zamiast tego wskazuje nazwę zmiennej środowiskowej, która zawiera parametry połączenia. Dzięki temu aplikacja jest bezpieczniejsza. Aby uzyskać więcej informacji, zobacz redis parametry połączenia.

Użycie

Funkcje publikowania/subskrybowania usługi Redis, które umożliwiają wysyłanie komunikatów do usługi Redis i emisję do subskrybentów. Ustawienie RedisPubSubTrigger umożliwia wyzwalanie usługi Azure Functions w działaniu pub/podrzędnym. Subskrybuje RedisPubSubTriggerokreślony wzorzec kanału przy użyciu elementu PSUBSCRIBEi wyświetla komunikaty odebrane w tych kanałach do funkcji.

Wymagania wstępne i ograniczenia

  • Element RedisPubSubTrigger nie może nasłuchiwać powiadomień o przestrzeni kluczy w klastrowanych pamięciach podręcznych.
  • Funkcje warstwy Podstawowa nie obsługują wyzwalania w trybie ani keyspace keyevent powiadomień za pośrednictwem .RedisPubSubTrigger
  • Element RedisPubSubTrigger nie jest obsługiwany w planie zużycia, ponieważ usługa Redis PubSub wymaga, aby klienci zawsze aktywnie słuchali wszystkich komunikatów. W przypadku planów zużycia funkcja może przegapić niektóre komunikaty opublikowane w kanale.
  • Funkcje z funkcją RedisPubSubTrigger nie powinny być skalowane w poziomie do wielu wystąpień. Każde wystąpienie nasłuchuje i przetwarza każdy komunikat podrzędny pubu, co powoduje zduplikowanie przetwarzania.

Ostrzeżenie

Ten wyzwalacz nie jest obsługiwany w planie zużycia, ponieważ usługa Redis PubSub wymaga, aby klienci zawsze aktywnie słuchali wszystkich komunikatów. W przypadku planów zużycia funkcja może przegapić niektóre komunikaty opublikowane w kanale.

Wyzwalanie powiadomień o przestrzeni kluczy

Usługa Redis oferuje wbudowaną koncepcję nazywaną powiadomieniami o przestrzeni kluczy. Po włączeniu ta funkcja publikuje powiadomienia o szerokiej gamie akcji pamięci podręcznej do dedykowanego kanału pubu/podkanałów. Obsługiwane akcje obejmują akcje wpływające na określone klucze, nazywane powiadomieniami o przestrzeni kluczy i określone polecenia nazywane powiadomieniami keyevent. Obsługiwany jest ogromny zakres akcji usługi Redis, takich jak SET, DELi EXPIRE. Pełną listę można znaleźć w dokumentacji powiadomień o przestrzeni kluczy.

Powiadomienia keyspace i keyevent są publikowane przy użyciu następującej składni:

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

Ponieważ te zdarzenia są publikowane w kanałach pub/sub, RedisPubSubTrigger program jest w stanie je odebrać. Aby uzyskać więcej przykładów, zobacz sekcję RedisPubSubTrigger .

Ważne

W usłudze Azure Cache for Redis keyspace zdarzenia muszą być włączone przed opublikowaniem powiadomień. Aby uzyskać więcej informacji, zobacz Ustawienia zaawansowane.

Type Opis
string Komunikat kanału serializowany jako kod JSON (UTF-8 zakodowany dla typów bajtów) w następującym formacie.
Custom Wyzwalacz używa Json.NET serializacji do mapowania komunikatu z kanału do danego typu niestandardowego.

Format ciągu JSON

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

Type Opis
string Komunikat kanału serializowany jako kod JSON (UTF-8 zakodowany dla typów bajtów) w następującym formacie.
Custom Wyzwalacz używa Json.NET serializacji do mapowania komunikatu z kanału z typu string niestandardowego.
{
  "SubscriptionChannel":"__keyspace@0__:*",
  "Channel":"__keyspace@0__:mykey",
  "Message":"set"
}