Share via


RedisPubSubTrigger voor Azure Functions

Redis-functies publiceren/abonneren waarmee berichten naar Redis kunnen worden verzonden en naar abonnees kunnen worden uitgezonden.

Voor meer informatie over Azure Cache voor Redis triggers en bindingen, redis-extensie voor Azure Functions.

Bereik van beschikbaarheid voor functietriggers

Laag Basis Standaard, Premium Enterprise, Enterprise Flash
Pub/subtrigger Ja Ja Ja

Waarschuwing

Deze trigger wordt niet ondersteund voor een verbruiksplan , omdat Voor Redis PubSub clients altijd actief moeten luisteren om alle berichten te ontvangen. Voor verbruiksabonnementen kan uw functie bepaalde berichten missen die naar het kanaal zijn gepubliceerd.

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.

Voorbeelden

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.

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.

Dit voorbeeld luistert naar het kanaal pubsubTest.

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

In dit voorbeeld worden eventuele keyspace-meldingen voor de sleutel keyspaceTestgeluisterd.

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

In dit voorbeeld worden eventuele keyevent meldingen voor de opdracht DELVerwijderen geluisterd.

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

Dit voorbeeld luistert naar het kanaal pubsubTest.

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")
                String message,
            final ExecutionContext context) {
            context.getLogger().info(message);
    }
}

In dit voorbeeld worden eventuele keyspace-meldingen voor de sleutel myKeygeluisterd.

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")
                String message,
            final ExecutionContext context) {
            context.getLogger().info(message);
    }
}

In dit voorbeeld worden eventuele keyevent meldingen voor de opdracht DELVerwijderen geluisterd.

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")
                String message,
            final ExecutionContext context) {
            context.getLogger().info(message);
    }
}

In dit voorbeeld wordt hetzelfde index.js bestand gebruikt, waarbij bindingsgegevens in het function.json bestand worden bepaald op welk kanaal de trigger plaatsvindt.

Dit is het index.js bestand:

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

Van function.json:

Hier zijn bindingsgegevens om naar het kanaal pubsubTestte luisteren.

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "pubsubTest",
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "index.js"
}

Hier zijn bindingsgegevens om naar keyspace-meldingen voor de sleutel keyspaceTestte luisteren.

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "__keyspace@0__:keyspaceTest",
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "index.js"
}

Hier vindt u bindingsgegevens om te luisteren naar keyevent meldingen voor de opdracht DELVerwijderen.

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "__keyevent@0__:del",
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "index.js"
}

In dit voorbeeld wordt hetzelfde run.ps1 bestand gebruikt, waarbij bindingsgegevens in het function.json bestand worden bepaald op welk kanaal de trigger plaatsvindt.

Dit is het run.ps1 bestand:

param($message, $TriggerMetadata)
Write-Host $message

Van function.json:

Hier zijn bindingsgegevens om naar het kanaal pubsubTestte luisteren.

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "pubsubTest",
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "run.ps1"
}

Hier zijn bindingsgegevens om naar keyspace-meldingen voor de sleutel keyspaceTestte luisteren.

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "__keyspace@0__:keyspaceTest",
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "run.ps1"
}

Hier vindt u bindingsgegevens om te luisteren naar keyevent meldingen voor de opdracht DELVerwijderen.

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "__keyevent@0__:del",
      "name": "message",
      "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, waarbij bindingsgegevens in het function.json bestand worden bepaald op welk kanaal de trigger plaatsvindt.

Dit is het __init__.py bestand:

import logging

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

Van function.json:

Hier zijn bindingsgegevens om naar het kanaal pubsubTestte luisteren.

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "pubsubTest",
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "__init__.py"
}

Hier zijn bindingsgegevens om naar keyspace-meldingen voor de sleutel keyspaceTestte luisteren.

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "__keyspace@0__:keyspaceTest",
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "__init__.py"
}

Hier vindt u bindingsgegevens om te luisteren naar keyevent meldingen voor de opdracht DELVerwijderen.

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "__keyevent@0__:del",
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "__init__.py"
}

Kenmerken

Parameter Omschrijving Vereist Standaardinstelling
Connection De naam van de toepassingsinstelling die de cache-verbindingsreeks bevat, zoals:<cacheName>.redis.cache.windows.net:6380,password... Ja
Channel Het pub-subkanaal waarnaar de trigger moet luisteren. Ondersteunt glob-stijl kanaalpatronen. Dit veld kan worden omgezet met behulp van INameResolver. Ja

Aantekeningen

Parameter Omschrijving Vereist Standaardinstelling
name Naam van de variabele die de waarde bevat die door de functie wordt geretourneerd. Ja
connection De naam van de toepassingsinstelling die de cache-verbindingsreeks bevat, zoals:<cacheName>.redis.cache.windows.net:6380,password... Ja
channel Het pub-subkanaal waarnaar de trigger moet luisteren. Ondersteunt glob-stijl kanaalpatronen. Ja

Configuratie

function.json-eigenschap Beschrijving Vereist Standaardinstelling
type Triggertype. Voor de pub-subtrigger is redisPubSubTriggerhet type. Ja
connection De naam van de toepassingsinstelling die de cache-verbindingsreeks bevat, zoals:<cacheName>.redis.cache.windows.net:6380,password... Ja
channel Naam van het pub-subkanaal waarop een abonnement wordt geplaatst Ja
name Naam van de variabele die de waarde bevat die door de functie wordt geretourneerd. Ja
direction Moet worden ingesteld op in. Ja

Belangrijk

De connection parameter bevat de Redis-cache niet verbindingsreeks zelf. In plaats daarvan verwijst deze naar de naam van de omgevingsvariabele die de verbindingsreeks bevat. Hierdoor is de toepassing veiliger. Zie Redis verbindingsreeks voor meer informatie.

Gebruik

Redis-functies publiceren/abonneren waarmee berichten naar Redis kunnen worden verzonden en naar abonnees kunnen worden uitgezonden. RedisPubSubTrigger Hiermee kan Azure Functions worden geactiveerd op pub-/subactiviteit. Het RedisPubSubTriggerabonneert zich op een specifiek kanaalpatroon met behulp van PSUBSCRIBEen geeft berichten weer die op deze kanalen zijn ontvangen voor de functie.

Vereisten en beperkingen

  • De RedisPubSubTrigger app kan niet luisteren naar keyspace-meldingen in geclusterde caches.
  • Functies van de Basic-laag bieden geen ondersteuning voor het activeren van keyspace of keyevent meldingen via de RedisPubSubTrigger.
  • Het RedisPubSubTrigger wordt niet ondersteund voor een verbruiksabonnement omdat Redis PubSub vereist dat clients altijd actief luisteren om alle berichten te ontvangen. Voor verbruiksabonnementen kan uw functie bepaalde berichten missen die naar het kanaal zijn gepubliceerd.
  • Functies met de RedisPubSubTrigger functie mogen niet worden uitgeschaald naar meerdere exemplaren. Elk exemplaar luistert en verwerkt elk pubsubbericht, wat resulteert in dubbele verwerking.

Waarschuwing

Deze trigger wordt niet ondersteund voor een verbruiksplan , omdat Voor Redis PubSub clients altijd actief moeten luisteren om alle berichten te ontvangen. Voor verbruiksabonnementen kan uw functie bepaalde berichten missen die naar het kanaal zijn gepubliceerd.

Activeren op keyspace-meldingen

Redis biedt een ingebouwd concept met de naam keyspacemeldingen. Wanneer deze functie is ingeschakeld, worden meldingen van een breed scala aan cacheacties gepubliceerd naar een toegewezen pub/subkanaal. Ondersteunde acties zijn acties die van invloed zijn op specifieke sleutels, keyspace-meldingen genoemd, en specifieke opdrachten, zogenaamde keyevent-meldingen. Een groot aantal Redis-acties wordt ondersteund, zoals SET, DELen EXPIRE. De volledige lijst vindt u in de documentatie voor keyspace-meldingen.

De keyspace en keyevent meldingen worden gepubliceerd met de volgende syntaxis:

PUBLISH __keyspace@0__:<affectedKey> <command>
PUBLISH __keyevent@0__:<affectedCommand> <key>

Omdat deze gebeurtenissen worden gepubliceerd op pub-/subkanalen, kunnen ze RedisPubSubTrigger worden opgehaald. Zie de sectie RedisPubSubTrigger voor meer voorbeelden.

Belangrijk

In Azure Cache voor Redis keyspace moeten gebeurtenissen worden ingeschakeld voordat meldingen worden gepubliceerd. Zie Geavanceerd Instellingen voor meer informatie.

Type Description
string Het kanaalbericht dat is geserialiseerd als JSON (UTF-8 gecodeerd voor bytetypen) in de volgende indeling.
Custom De trigger gebruikt Json.NET serialisatie om het bericht van het kanaal toe te wijzen aan het opgegeven aangepaste type.

JSON-tekenreeksindeling

{
  "SubscriptionChannel":"__keyspace@0__:*",
  "Channel":"__keyspace@0__:mykey",
  "Message":"set"
}

Type Description
string Het kanaalbericht dat is geserialiseerd als JSON (UTF-8 gecodeerd voor bytetypen) in de volgende indeling.
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.
{
  "SubscriptionChannel":"__keyspace@0__:*",
  "Channel":"__keyspace@0__:mykey",
  "Message":"set"
}