Delen via


RedisStreamTrigger voor Azure Functions

De RedisStreamTrigger nieuwe vermeldingen uit een stroom worden gelezen en deze elementen naar de functie weergegeven.

Laag Basis Standaard, Premium Enterprise, Enterprise Flash
Stromen Ja Ja Ja

Belangrijk

Redis-triggers worden momenteel niet ondersteund voor functies die worden uitgevoerd in het verbruiksabonnement.

Belangrijk

Het Node.js v4-model voor Functions wordt nog niet ondersteund door de extensie Azure Cache voor Redis. Raadpleeg de ontwikkelaarshandleiding voor Azure Functions Node.js voor meer informatie over hoe het v4-model werkt. Raadpleeg de migratiehandleiding voor meer informatie over de verschillen tussen v3 en v4.

Belangrijk

Het Python v2-model voor Functions wordt nog niet ondersteund door de Azure Cache voor Redis-extensie. Raadpleeg de Ontwikkelaarshandleiding voor Azure Functions Python voor meer informatie over hoe het v2-model werkt.

Opmerking

Belangrijk

Voor .NET-functies wordt het gebruik van het geïsoleerde werkrolmodel aanbevolen via het procesmodel. Zie de verschillen tussen het geïsoleerde werkrolmodel en het in-procesmodel voor .NET in Azure Functions voor een vergelijking van de in-proces- en geïsoleerde werkrolmodellen.

Uitvoeringsmodel Beschrijving
Geïsoleerde werkrolmodel Uw functiecode wordt uitgevoerd in een afzonderlijk .NET-werkproces. Gebruiken met ondersteunde versies van .NET en .NET Framework. Zie .NET geïsoleerde werkprocesfuncties ontwikkelen voor meer informatie.
Model in proces Uw functiecode wordt uitgevoerd in hetzelfde proces als het Functions-hostproces. Ondersteunt alleen LTS-versies (Long Term Support) van .NET. Zie .NET-klassebibliotheekfuncties ontwikkelen voor meer informatie.
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);
    }
}

In dit voorbeeld wordt hetzelfde index.js bestand gebruikt, met bindingsgegevens in het function.json bestand.

Dit is het index.js bestand:

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

Hier function.jsonziet u de bindingsgegevens:

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

In dit voorbeeld wordt hetzelfde run.ps1 bestand gebruikt, met bindingsgegevens in het function.json bestand.

Dit is het run.ps1 bestand:

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

Hier function.jsonziet u de bindingsgegevens:

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

Voor het Python v1-programmeermodel moet u bindingen definiëren in een afzonderlijk function.json bestand in de functiemap. Zie de Ontwikkelaarshandleiding voor Python voor meer informatie.

In dit voorbeeld wordt hetzelfde __init__.py bestand gebruikt, met bindingsgegevens in het function.json bestand.

Dit is het __init__.py bestand:

import logging

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

Hier function.jsonziet u de bindingsgegevens:

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

Kenmerken

Parameters Beschrijving Vereist Standaardinstelling
Connection De naam van de toepassingsinstelling die de cache-verbindingsreeks bevat, zoals:<cacheName>.redis.cache.windows.net:6380,password... Ja
Key Sleutel waaruit u wilt lezen. Ja
PollingIntervalInMs Hoe vaak de Redis-server in milliseconden moet worden gepeild. Optioneel 1000
MessagesPerWorker Het aantal berichten dat elke functiewerkrol moet verwerken. Wordt gebruikt om te bepalen hoeveel werkrollen de functie moet schalen. Optioneel 100
Count Het aantal elementen dat moet worden opgehaald uit Redis tegelijk. Optioneel 10
DeleteAfterProcess Geeft aan of de functie de streamvermeldingen verwijdert na verwerking. Optioneel false

Aantekeningen

Parameter Omschrijving Vereist Default
name entry Ja
connection De naam van de toepassingsinstelling die de cache-verbindingsreeks bevat, zoals:<cacheName>.redis.cache.windows.net:6380,password... Ja
key Sleutel waaruit u wilt lezen. Ja
pollingIntervalInMs Hoe vaak Redis moet worden gepeild, in milliseconden. Optioneel 1000
messagesPerWorker Het aantal berichten dat elke functiewerkrol moet verwerken. Het wordt gebruikt om te bepalen naar hoeveel werkrollen de functie moet worden geschaald. Optioneel 100
count Aantal vermeldingen dat in Redis tegelijk moet worden gelezen. Vermeldingen worden parallel verwerkt. Optioneel 10
deleteAfterProcess Of de streamvermeldingen moeten worden verwijderd nadat de functie is uitgevoerd. Optioneel false

Configuratie

In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u in het function.json-bestand hebt ingesteld.

function.json eigenschappen Beschrijving Vereist Default
type Ja
deleteAfterProcess Optioneel false
connection De naam van de toepassingsinstelling die de cache-verbindingsreeks bevat, zoals:<cacheName>.redis.cache.windows.net:6380,password... Ja
key De sleutel waaruit moet worden gelezen. Ja
pollingIntervalInMs Hoe vaak Redis in milliseconden moet worden gepeild. Optioneel 1000
messagesPerWorker (optioneel) Het aantal berichten dat elke functiewerkrol moet verwerken. Wordt gebruikt om te bepalen hoeveel werkrollen de functie moet schalen Optioneel 100
count Aantal vermeldingen dat in Redis tegelijk moet worden gelezen. Deze worden parallel verwerkt. Optioneel 10
name Ja
direction Ja

Zie de sectie Voorbeeld voor volledige voorbeelden.

Gebruik

De RedisStreamTrigger Azure-functie leest nieuwe vermeldingen uit een stroom en geeft deze vermeldingen weer in de functie.

De trigger pollt Redis met een configureerbaar vast interval en gebruikt XREADGROUP om elementen uit de stream te lezen.

De consumentengroep voor alle exemplaren van een functie is de naam van de functie, SimpleStreamTrigger dus voor het StreamTrigger-voorbeeld.

Elk exemplaar van een functie gebruikt de WEBSITE_INSTANCE_ID willekeurige GUID die als consumentennaam in de groep moet worden gebruikt om ervoor te zorgen dat uitgeschaalde exemplaren van de functie niet dezelfde berichten uit de stream lezen.

Type Description
byte[] Het bericht van het kanaal.
string Het bericht van het kanaal.
Custom De trigger maakt gebruik van Json.NET serialisatie om het bericht van het kanaal van een string in een aangepast type toe te wijzen.