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 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.");
}
}
}
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 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);
}
}
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 DEL
usuwania .
{
"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 DEL
usuwania .
{
"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 DEL
usuwania .
{
"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 RedisPubSubTrigger
określony wzorzec kanału przy użyciu elementu PSUBSCRIBE
i 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
, DEL
i 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"
}
Powiązana zawartość
- Wprowadzenie do usługi Azure Functions
- Samouczek: rozpoczynanie pracy z wyzwalaczami usługi Azure Functions w usłudze Azure Cache for Redis
- Samouczek: tworzenie pamięci podręcznej za pomocą usługi Azure Functions i usługi Azure Cache for Redis
- Parametry połączenia usługi Redis
- Komunikaty podrzędne pubu Redis