RedisPubSubTrigger für Azure Functions
Mit dem Redis-Feature zum Veröffentlichen/Abonnieren (Pub/Sub) können Nachrichten an Redis gesendet und an Abonnenten weitergeleitet werden.
Weitere Informationen zu Azure Cache für Redis-Trigger und -Bindungen, Redis-Erweiterung für Azure-Funktionen.
Verfügbarkeitsbereich für Funktionstrigger
Triggertyp | Azure Managed Redis | Azure Cache for Redis |
---|---|---|
Pub/Sub-Trigger | Ja | Ja |
Wichtig
Wenn Sie Azure Managed Redis oder die Enterprise-Ebenen von Azure Cache für Redis verwenden, verwenden Sie Port 10000 anstelle von Port 6380 oder 6379.
Warnung
Dieser Trigger wird für einen Verbrauchsplan nicht unterstützt, da Redis PubSub erfordert, dass Clients immer aktiv lauschen, um alle Nachrichten zu empfangen. Bei Verbrauchsplänen kann Ihre Funktion bestimmte Nachrichten verpassen, die im Kanal veröffentlicht wurden.
Wichtig
Das Node.js v4-Modell für Funktionen wird von der Azure Cache for Redis-Erweiterung noch nicht unterstützt. Weitere Informationen zur Funktionsweise des v4-Modells finden Sie im Azure Functions Node.js-Entwicklerhandbuch. Weitere Informationen zu den Unterschieden zwischen v3 und v4 finden Sie im Migrationshandbuch.
Wichtig
Das Python v2-Modell für Funktionen wird von der Azure Cache for Redis-Erweiterung noch nicht unterstützt. Weitere Informationen zur Funktionsweise des v2-Modells finden Sie im Azure Functions Python-Entwicklerhandbuch.
Beispiele
Ausführungsmodell | Beschreibung |
---|---|
Isoliertes Workermodell | Ihr Funktionscode wird in einem separaten .NET-Workerprozess ausgeführt. Verwenden Sie dazu unterstützte Versionen von .NET und .NET Framework. Weitere Informationen finden Sie unter Entwickeln von isolierten .NET-Workerprozessfunktionen. |
In-Process-Modell | Ihr Funktionscode wird im gleichen Prozess wie der Functions-Hostprozess ausgeführt. Unterstützt nur LTS-Versionen (Long Term Support) von .NET. Weitere Informationen finden Sie unter Entwickeln von .NET-Klassenbibliotheksfunktionen. |
Wichtig
Für .NET-Funktionen wird die Verwendung des isolierten Workermodells gegenüber dem In-Process-Modell empfohlen. Einen Vergleich der In-Process - und isolierten Workermodelle finden Sie unter den Unterschieden zwischen dem isolierten Workermodell und dem Prozessmodell für .NET in Azure Functions.
In diesem Beispiel wird dem Kanal pubsubTest
gelauscht.
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);
}
}
}
Dieses Beispiel lauscht auf alle Keyspacebenachrichtigungen für den Schlüssel 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);
}
}
}
Dieses Beispiel lauscht auf alle DEL
-Benachrichtigungen für den Löschbefehl keyevent
.
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.");
}
}
}
In diesem Beispiel wird dem Kanal pubsubTest
gelauscht.
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);
}
}
Dieses Beispiel lauscht auf alle Keyspacebenachrichtigungen für den Schlüssel 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);
}
}
Dieses Beispiel lauscht auf alle DEL
-Benachrichtigungen für den Löschbefehl keyevent
.
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);
}
}
Dieses Beispiel verwendet dieselbe index.js
-Datei, wobei die Bindungsdaten in der function.json
-Datei bestimmen, in welchem Kanal der Trigger auftritt.
Hier sehen Sie die Datei index.js
:
module.exports = async function (context, message) {
context.log(message);
}
Von function.json
:
Hier finden Sie die Bindungsdaten, um dem Kanal pubsubTest
zu lauschen:
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
Hier finden Sie die Bindungsdaten, um den Keyspacebenachrichtigungen für den Schlüssel keyspaceTest
zu lauschen:
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
Hier finden Sie die Bindungsdaten, um den keyevent
-Benachrichtigungen für den Löschbefehl DEL
zu lauschen:
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
Dieses Beispiel verwendet dieselbe run.ps1
-Datei, wobei die Bindungsdaten in der function.json
-Datei bestimmen, in welchem Kanal der Trigger auftritt.
Hier sehen Sie die Datei run.ps1
:
param($message, $TriggerMetadata)
Write-Host $message
Von function.json
:
Hier finden Sie die Bindungsdaten, um dem Kanal pubsubTest
zu lauschen:
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
Hier finden Sie die Bindungsdaten, um den Keyspacebenachrichtigungen für den Schlüssel keyspaceTest
zu lauschen:
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
Hier finden Sie die Bindungsdaten, um den keyevent
-Benachrichtigungen für den Löschbefehl DEL
zu lauschen:
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
Für das Python v1-Programmiermodell müssen Sie Bindungen in einer separaten function.json-Datei im Funktionsordner definieren. Weitere Informationen finden Sie im Python Developer-Leitfaden.
Dieses Beispiel verwendet dieselbe __init__.py
-Datei, wobei die Bindungsdaten in der function.json
-Datei bestimmen, in welchem Kanal der Trigger auftritt.
Hier sehen Sie die Datei __init__.py
:
import logging
def main(message: str):
logging.info(message)
Von function.json
:
Hier finden Sie die Bindungsdaten, um dem Kanal pubsubTest
zu lauschen:
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Hier finden Sie die Bindungsdaten, um den Keyspacebenachrichtigungen für den Schlüssel keyspaceTest
zu lauschen:
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Hier finden Sie die Bindungsdaten, um den keyevent
-Benachrichtigungen für den Löschbefehl DEL
zu lauschen:
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Attribute
Parameter | Beschreibung des Dataflows | Erforderlich | Standard |
---|---|---|---|
Connection |
Der Name der Anwendungseinstellung, die den Cache Verbindungszeichenfolge enthält, z. B.:<cacheName>.redis.cache.windows.net:6380,password... |
Ja | |
Channel |
Der Name des Pub/Sub-Kanals, dem der Trigger lauschen soll. Globkanalmuster werden unterstützt. Dieses Feld kann mithilfe von INameResolver aufgelöst werden. |
Ja |
Anmerkungen
Parameter | Beschreibung des Dataflows | Erforderlich | Standard |
---|---|---|---|
name |
Der Name der Variablen, die den von der Funktion zurückgegebenen Wert enthält | Ja | |
connection |
Der Name der Anwendungseinstellung, die den Cache Verbindungszeichenfolge enthält, z. B.:<cacheName>.redis.cache.windows.net:6380,password... |
Ja | |
channel |
Der Name des Pub/Sub-Kanals, dem der Trigger lauschen soll. Globkanalmuster werden unterstützt. | Ja |
Konfiguration
Eigenschaft von „function.json“ | Beschreibung | Erforderlich | Standard |
---|---|---|---|
type |
Der Triggertyp, Für den Pub-Sub-Trigger lautet redisPubSubTrigger der Typ . |
Ja | |
connection |
Der Name der Anwendungseinstellung, die den Cache Verbindungszeichenfolge enthält, z. B.:<cacheName>.redis.cache.windows.net:6380,password... |
Ja | |
channel |
Name des pub-Unterkanals, der abonniert wird. | Ja | |
pattern |
Ein boolescher Wert, der angibt, dass der angegebene Kanal Musterabgleich verwendet. Wenn pattern dies der Fall ist, wird der Kanal wie ein Glob-Style-Muster anstelle eines Literals behandelt. |
Ja | |
name |
Der Name der Variablen, die den von der Funktion zurückgegebenen Wert enthält | Ja | |
direction |
Muss auf in festgelegt sein. |
Ja |
Wichtig
Der connection
-Parameter enthält nicht die Redis Cache-Verbindungszeichenfolge selbst. Stattdessen verweist er auf den Namen der Umgebungsvariablen, die die Verbindungszeichenfolge enthält. Dadurch wird die Anwendung sicherer. Weitere Informationen finden Sie unter Redis-Verbindungszeichenfolgen.
Verbrauch
Mit dem Redis-Feature zum Veröffentlichen/Abonnieren (Pub/Sub) können Nachrichten an Redis gesendet und an Abonnenten weitergeleitet werden. RedisPubSubTrigger
ermöglicht, dass Azure-Funktionen bei Pub/Sub-Aktivitäten ausgelöst werden. RedisPubSubTrigger
abonniert ein bestimmtes Kanalmuster mithilfe von PSUBSCRIBE
und leitet die auf diesen Kanälen empfangenen Nachrichten an die Funktion weiter.
Voraussetzungen und Einschränkungen
- Der
RedisPubSubTrigger
ist nicht in der Lage, Keyspace-Benachrichtigungen in gruppierten Caches zu lauschen. - Grundlegende Ebenenfunktionen unterstützen nicht das Auslösen von
keyspace
- oderkeyevent
-Benachrichtigungen über denRedisPubSubTrigger
. RedisPubSubTrigger
wird für einen Verbrauchsplan nicht unterstützt, da der Pub/Sub-Ansatz in Redis erfordert, dass Clients immer aktiv lauschen, um alle Nachrichten zu empfangen. Bei Verbrauchsplänen kann Ihre Funktion bestimmte Nachrichten verpassen, die im Kanal veröffentlicht wurden.- Funktionen mit
RedisPubSubTrigger
sollten nicht auf mehrere Instanzen aufskaliert werden. Jede Instanz überwacht und verarbeitet jede Pub-Unternachricht, was zu doppelter Verarbeitung führt.
Warnung
Dieser Trigger wird für einen Verbrauchsplan nicht unterstützt, da Redis PubSub erfordert, dass Clients immer aktiv lauschen, um alle Nachrichten zu empfangen. Bei Verbrauchsplänen kann Ihre Funktion bestimmte Nachrichten verpassen, die im Kanal veröffentlicht wurden.
Auslösen von Keyspace-Benachrichtigungen
Redis bietet ein integriertes Konzept namens Keyspace-Benachrichtigungen. Wenn diese Funktion aktiviert ist, werden Benachrichtigungen zu einer Vielzahl von Cacheaktionen an einen dedizierten Pub-/Subkanal veröffentlicht. Zu den unterstützten Aktionen gehören Aktionen, die sich auf bestimmte Schlüssel auswirken, sogenannte Keyspace-Benachrichtigungen, und bestimmte Befehle, sogenannte Keyevent-Benachrichtigungen. Es wird eine Vielzahl von Redis-Aktionen unterstützt, z. B. SET
, DEL
und EXPIRE
. Die vollständige Liste finden Sie in der Dokumentation zu Keyspace-Benachrichtigungen.
Die keyspace
- und keyevent
-Benachrichtigungen werden mit der folgenden Syntax veröffentlicht:
PUBLISH __keyspace@0__:<affectedKey> <command>
PUBLISH __keyevent@0__:<affectedCommand> <key>
Da diese Ereignisse auf Pub-/Unterkanälen veröffentlicht werden, können sie von RedisPubSubTrigger
aufgenommen werden. Weitere Beispiele finden Sie im Abschnitt RedisPubSubTrigger.
Wichtig
In Azure Cache for Redis müssen keyspace
-Ereignisse aktiviert werden, bevor Benachrichtigungen veröffentlicht werden. Weitere Informationen finden Sie unter Erweiterte Einstellungen.
Typ | Beschreibung |
---|---|
string |
Die Kanalnachricht serialisiert als JSON (UTF-8-codiert für Bytetypen) im folgenden Format. |
Custom |
Der Trigger verwendet Json.NET Serialisierung, um die Nachricht aus dem Kanal dem angegebenen benutzerdefinierten Typ zuzuordnen. |
JSON-Zeichenfolgenformat
{
"SubscriptionChannel":"__keyspace@0__:*",
"Channel":"__keyspace@0__:mykey",
"Message":"set"
}
Typ | Beschreibung |
---|---|
string |
Die Kanalnachricht serialisiert als JSON (UTF-8-codiert für Bytetypen) im folgenden Format. |
Custom |
Der Trigger verwendet die Json.NET-Serialisierung, um die Nachricht aus dem Kanal (zunächst ein string -Typ) einem benutzerdefinierten Typ zuzuordnen. |
{
"SubscriptionChannel":"__keyspace@0__:*",
"Channel":"__keyspace@0__:mykey",
"Message":"set"
}