Udostępnij za pośrednictwem


RedisStreamTrigger dla usługi Azure Functions

Funkcja RedisStreamTrigger odczytuje nowe wpisy ze strumienia i wyświetla te elementy do funkcji.

Warstwa Podstawowy Standard, Premium Enterprise, Enterprise Flash
Strumienie Tak Tak Tak

Ważne

Wyzwalacze usługi Redis nie są obecnie obsługiwane w przypadku funkcji uruchomionych w planie Zużycie.

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ład

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.

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.
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);
    }
}

W tym przykładzie użyto tego samego index.js pliku z danymi powiązania w function.json pliku.

index.js Oto plik:

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

W function.jsonpliku oto dane powiązania:

{
  "bindings": [
    {
      "type": "redisStreamTrigger",
      "connection": "redisConnectionString",
      "key": "streamTest",
      "pollingIntervalInMs": 1000,
      "maxBatchSize": 16,
      "name": "entry",
      "direction": "in"
    }
  ],
  "scriptFile": "index.js"
}

W tym przykładzie użyto tego samego run.ps1 pliku z danymi powiązania w function.json pliku.

run.ps1 Oto plik:

param($entry, $TriggerMetadata)
Write-Host ($entry | ConvertTo-Json)

W function.jsonpliku oto dane powiązania:

{
  "bindings": [
    {
      "type": "redisStreamTrigger",
      "connection": "redisConnectionString",
      "key": "streamTest",
      "pollingIntervalInMs": 1000,
      "maxBatchSize": 16,
      "name": "entry",
      "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.

__init__.py Oto plik:

import logging

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

W function.jsonpliku oto dane powiązania:

{
  "bindings": [
    {
      "type": "redisStreamTrigger",
      "connection": "redisConnectionString",
      "key": "streamTest",
      "pollingIntervalInMs": 1000,
      "maxBatchSize": 16,
      "name": "entry",
      "direction": "in"
    }
  ],
  "scriptFile": "__init__.py"
}

Atrybuty

Parametry 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
Key Klucz do odczytu z. Tak
PollingIntervalInMs Jak często sondować serwer Redis w milisekundach. Opcjonalnie 1000
MessagesPerWorker Liczba komunikatów, które powinien przetwarzać każdy proces roboczy funkcji. Służy do określania liczby procesów roboczych, do których ma być skalowana funkcja. Opcjonalnie 100
Count Liczba elementów do pobrania z usługi Redis jednocześnie. Opcjonalnie 10
DeleteAfterProcess Wskazuje, czy funkcja usuwa wpisy strumienia po przetworzeniu. Opcjonalnie false

Adnotacje

Parametr opis Wymagani Wartość domyślna
name entry 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
key Klucz do odczytu z. Tak
pollingIntervalInMs Jak często sondować usługę Redis w milisekundach. Opcjonalnie 1000
messagesPerWorker Liczba komunikatów, które powinien przetwarzać każdy proces roboczy funkcji. Służy do określania liczby procesów roboczych, do których ma być skalowana funkcja. Opcjonalnie 100
count Liczba wpisów do odczytu z usługi Redis jednocześnie. Wpisy są przetwarzane równolegle. Opcjonalnie 10
deleteAfterProcess Czy usunąć wpisy strumienia po uruchomieniu funkcji. Opcjonalnie false

Konfigurowanie

W poniższej tabeli opisano właściwości konfiguracji powiązania ustawione w pliku function.json.

właściwości function.json opis Wymagani Wartość domyślna
type Tak
deleteAfterProcess Opcjonalnie false
connection Nazwa ustawienia aplikacji, które zawiera parametry połączenia pamięci podręcznej, takie jak:<cacheName>.redis.cache.windows.net:6380,password... Tak
key Klucz do odczytania. Tak
pollingIntervalInMs Jak często sondować usługę Redis w milisekundach. Opcjonalnie 1000
messagesPerWorker (opcjonalnie) Liczba komunikatów, które powinien przetwarzać każdy proces roboczy funkcji. Służy do określania liczby procesów roboczych, które mają być skalowane Opcjonalnie 100
count Liczba wpisów do odczytu z usługi Redis jednocześnie. Są one przetwarzane równolegle. Opcjonalnie 10
name Tak
direction Tak

Zobacz sekcję Przykład, aby zapoznać się z kompletnymi przykładami.

Użycie

Funkcja RedisStreamTrigger platformy Azure odczytuje nowe wpisy ze strumienia i wyświetla te wpisy do funkcji.

Wyzwalacz sonduje usługę Redis w konfigurowalnym stałym interwale i używa XREADGROUP ich do odczytywania elementów ze strumienia.

Grupa odbiorców dla wszystkich wystąpień funkcji jest nazwą funkcji, SimpleStreamTrigger czyli dla przykładu StreamTrigger.

Każde wystąpienie funkcji używa identyfikatora WEBSITE_INSTANCE_ID GUID lub generuje losowy identyfikator GUID do użycia jako nazwa odbiorcy w grupie w celu zapewnienia, że skalowane w poziomie wystąpienia funkcji nie odczytują tych samych komunikatów ze strumienia.

Type Opis
byte[] Komunikat z kanału.
string Komunikat z kanału.
Custom Wyzwalacz używa Json.NET serializacji do mapowania komunikatu z kanału z typu string niestandardowego.