Freigeben über


RedisStreamTrigger für Azure-Funktionen

Der RedisStreamTrigger liest neue Einträge aus einem Stream und überträgt diese Elemente an die Funktion.

Tarif Standard Standard, Premium Enterprise, Enterprise Flash
Datenströme Ja Ja Ja

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.