RedisStreamTrigger für Azure-Funktionen
Der RedisStreamTrigger
liest neue Einträge aus einem Stream und überträgt diese Elemente an die Funktion.
Verfügbarkeitsbereich für Funktionstrigger
Triggertyp | Azure Managed Redis | Azure Cache for Redis |
---|---|---|
Datenströme | 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.
Wichtig
Redis-Trigger werden derzeit für Funktionen, die im Verbrauchsplan ausgeführt werden, nicht unterstützt.
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.
Beispiel
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.
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. |
using Microsoft.Extensions.Logging;
namespace Microsoft.Azure.Functions.Worker.Extensions.Redis.Samples.RedisStreamTrigger
{
internal class SimpleStreamTrigger
{
private readonly ILogger<SimpleStreamTrigger> logger;
public SimpleStreamTrigger(ILogger<SimpleStreamTrigger> logger)
{
this.logger = logger;
}
[Function(nameof(SimpleStreamTrigger))]
public void Run(
[RedisStreamTrigger(Common.connectionStringSetting, "streamKey")] string entry)
{
logger.LogInformation(entry);
}
}
}
package com.function.RedisStreamTrigger;
import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.redis.annotation.*;
public class SimpleStreamTrigger {
@FunctionName("SimpleStreamTrigger")
public void run(
@RedisStreamTrigger(
name = "req",
connection = "redisConnectionString",
key = "streamTest",
pollingIntervalInMs = 1000,
maxBatchSize = 1)
String message,
final ExecutionContext context) {
context.getLogger().info(message);
}
}
Dieses Beispiel verwendet dieselbe index.js
-Datei mit Bindung von Daten in der function.json
-Datei.
Hier sehen Sie die index.js
-Datei:
module.exports = async function (context, entry) {
context.log(entry);
}
Hier sind die Bindungsdaten von function.json
:
{
"bindings": [
{
"type": "redisStreamTrigger",
"connection": "redisConnectionString",
"key": "streamTest",
"pollingIntervalInMs": 1000,
"maxBatchSize": 16,
"name": "entry",
"direction": "in"
}
],
"scriptFile": "index.js"
}
Dieses Beispiel verwendet dieselbe run.ps1
-Datei mit Bindung von Daten in der function.json
-Datei.
Hier sehen Sie die run.ps1
-Datei:
param($entry, $TriggerMetadata)
Write-Host ($entry | ConvertTo-Json)
Hier sind die Bindungsdaten von function.json
:
{
"bindings": [
{
"type": "redisStreamTrigger",
"connection": "redisConnectionString",
"key": "streamTest",
"pollingIntervalInMs": 1000,
"maxBatchSize": 16,
"name": "entry",
"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 mit Bindung von Daten in der function.json
-Datei.
Hier sehen Sie die __init__.py
-Datei:
import logging
def main(entry: str):
logging.info(entry)
Hier sind die Bindungsdaten von function.json
:
{
"bindings": [
{
"type": "redisStreamTrigger",
"connection": "redisConnectionString",
"key": "streamTest",
"pollingIntervalInMs": 1000,
"maxBatchSize": 16,
"name": "entry",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Attribute
Parameter | Beschreibung | Erforderlich | Standard |
---|---|---|---|
Connection |
Der Name der Anwendungseinstellung, die den Cache Verbindungszeichenfolge enthält, z. B.:<cacheName>.redis.cache.windows.net:6380,password... |
Ja | |
Key |
Schlüssel, aus dem gelesen werden soll. | Ja | |
PollingIntervalInMs |
Gibt in Millisekunden an, wie oft der Redis-Server abgefragt werden soll. | Optional | 1000 |
MessagesPerWorker |
Die Anzahl der Nachrichten, die jeder Functions-Worker verarbeiten soll. Wird verwendet, um zu bestimmen, auf wie viele Worker die Funktion skaliert werden soll. | Optional | 100 |
Count |
Die Anzahl der Elemente, die gleichzeitig von Redis abgerufen werden sollen. | Optional | 10 |
DeleteAfterProcess |
Gibt an, ob die Funktion die Streameinträge nach der Verarbeitung löscht. | Optional | false |
Anmerkungen
Parameter | Beschreibung des Dataflows | Erforderlich | Standard |
---|---|---|---|
name |
entry |
Ja | |
connection |
Der Name der Anwendungseinstellung, die den Cache Verbindungszeichenfolge enthält, z. B.:<cacheName>.redis.cache.windows.net:6380,password... |
Ja | |
key |
Schlüssel, aus dem gelesen werden soll. | Ja | |
pollingIntervalInMs |
Gibt in Millisekunden an, wie oft Redis abgefragt werden soll. | Optional | 1000 |
messagesPerWorker |
Die Anzahl der Nachrichten, die jeder Functions-Worker verarbeiten soll. Es wird verwendet, um zu bestimmen, wie viele Mitarbeiter die Funktion skalieren soll. | Optional | 100 |
count |
Anzahl der Einträge, die jeweils auf einmal von Redis gelesen werden sollen. Einträge werden parallel verarbeitet. | Optional | 10 |
deleteAfterProcess |
Gibt an, ob die Streameinträge nach dem Ausführen der Funktion gelöscht werden sollen. | Optional | false |
Konfiguration
Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie in der Datei function.json festlegen.
Eigenschaften in „function.json“ | Beschreibung | Erforderlich | Standard |
---|---|---|---|
type |
Ja | ||
deleteAfterProcess |
Optional | false |
|
connection |
Der Name der Anwendungseinstellung, die den Cache Verbindungszeichenfolge enthält, z. B.:<cacheName>.redis.cache.windows.net:6380,password... |
Ja | |
key |
Der Schlüssel, aus dem gelesen werden soll. | Ja | |
pollingIntervalInMs |
Gibt in Millisekunden an, wie oft Redis abgefragt werden soll. | Optional | 1000 |
messagesPerWorker |
(Optional:) Die Anzahl der Nachrichten, die jeder Functions-Worker verarbeiten soll. Wird verwendet, um zu ermitteln, auf wie viele Worker die Funktion skaliert werden soll | Optional | 100 |
count |
Anzahl der Einträge, die jeweils auf einmal von Redis gelesen werden sollen. Diese werden parallel verarbeitet. | Optional | 10 |
name |
Ja | ||
direction |
Ja |
Vollständige Beispiele finden Sie im Abschnitt Beispiele.
Verbrauch
Die Azure-Funktion RedisStreamTrigger
liest neue Einträge aus einem Stream und überträgt diese an die Funktion.
Der Trigger ruft Redis in einem konfigurierbaren festen Intervall ab und verwendet XREADGROUP
, um Elemente aus dem Stream zu lesen.
Die Consumergruppe für alle Instanzen einer Funktion ist der Name der Funktion, d. h SimpleStreamTrigger
. für das StreamTrigger-Beispiel.
Jede Funktionsinstanz verwendet oder WEBSITE_INSTANCE_ID
generiert eine zufällige GUID, um als Consumernamen innerhalb der Gruppe zu verwenden, um sicherzustellen, dass skalierte Instanzen der Funktion nicht dieselben Nachrichten aus dem Datenstrom lesen.
Typ | Beschreibung |
---|---|
byte[] |
Die Nachricht aus dem Kanal |
string |
Die Nachricht aus dem Kanal |
Custom |
Der Trigger verwendet die Json.NET-Serialisierung, um die Nachricht aus dem Kanal (zunächst ein string -Typ) einem benutzerdefinierten Typ zuzuordnen. |