Share via


RedisPubSubTrigger för Azure Functions (förhandsversion)

Redis-funktioner publicerar/prenumererar funktioner som gör att meddelanden kan skickas till Redis och sändas till prenumeranter.

Mer information om Utlösare och bindningar i Azure Cache for Redis finns i Redis-tillägget för Azure Functions.

Omfång för tillgänglighet för funktionsutlösare

Nivå Grundläggande Standard, Premium Enterprise, Enterprise Flash
Pub/underutlösare Ja Ja Ja

Varning

Den här utlösaren stöds inte i en förbrukningsplan eftersom Redis PubSub kräver att klienter alltid aktivt lyssnar för att ta emot alla meddelanden. För förbrukningsplaner kan funktionen missa vissa meddelanden som publicerats till kanalen.

Viktigt!

Node.js v4-modellen för Functions stöds ännu inte av Azure Cache for Redis-tillägget. Mer information om hur v4-modellen fungerar finns i utvecklarguiden för Azure Functions Node.js. Mer information om skillnaderna mellan v3 och v4 finns i migreringsguiden.

Viktigt!

Python v2-modellen för Functions stöds ännu inte av Azure Cache for Redis-tillägget. Mer information om hur v2-modellen fungerar finns i utvecklarhandboken för Azure Functions Python.

Exempel

Körningsmodell beskrivning
Isolerad arbetsmodell Funktionskoden körs i en separat .NET-arbetsprocess. Använd med versioner av .NET och .NET Framework som stöds. Mer information finns i Utveckla .NET-isolerade arbetsprocessfunktioner.
Processmodell Funktionskoden körs i samma process som Functions-värdprocessen. Stöder endast LTS-versioner (Long Term Support) av .NET. Mer information finns i Utveckla .NET-klassbiblioteksfunktioner.

Viktigt!

För .NET-funktioner rekommenderas användning av den isolerade arbetsmodellen över den pågående modellen. En jämförelse av de processbaserade och isolerade arbetsmodellerna finns i skillnader mellan den isolerade arbetsmodellen och den processbaserade modellen för .NET på Azure Functions.

Det här exemplet lyssnar på kanalen 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);
        }
    }
}

Det här exemplet lyssnar på alla keyspace-meddelanden för nyckeln keyspaceTest.

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

Det här exemplet lyssnar på meddelanden keyevent för borttagningskommandot DEL.

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

Det här exemplet lyssnar på kanalen 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);
    }
}

Det här exemplet lyssnar på alla keyspace-meddelanden för nyckeln myKey.

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

Det här exemplet lyssnar på meddelanden keyevent för borttagningskommandot DEL.

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

Det här exemplet använder samma index.js fil, med bindningsdata i function.json filen som avgör vilken kanal utlösaren inträffar på.

Här är index.js filen:

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

Från function.json:

Här är bindningsdata för att lyssna på kanalen pubsubTest.

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

Här är bindningsdata för att lyssna på keyspace-meddelanden för nyckeln keyspaceTest.

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

Här är bindningsdata för att keyevent lyssna på meddelanden för borttagningskommandot DEL.

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

Det här exemplet använder samma run.ps1 fil, med bindningsdata i function.json filen som avgör vilken kanal utlösaren inträffar på.

Här är run.ps1 filen:

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

Från function.json:

Här är bindningsdata för att lyssna på kanalen pubsubTest.

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

Här är bindningsdata för att lyssna på keyspace-meddelanden för nyckeln keyspaceTest.

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

Här är bindningsdata för att keyevent lyssna på meddelanden för borttagningskommandot DEL.

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

Programmeringsmodellen Python v1 kräver att du definierar bindningar i en separat function.json fil i funktionsmappen. Mer information finns i utvecklarguiden för Python.

Det här exemplet använder samma __init__.py fil, med bindningsdata i function.json filen som avgör vilken kanal utlösaren inträffar på.

Här är __init__.py filen:

import logging

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

Från function.json:

Här är bindningsdata för att lyssna på kanalen pubsubTest.

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

Här är bindningsdata för att lyssna på keyspace-meddelanden för nyckeln keyspaceTest.

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

Här är bindningsdata för att keyevent lyssna på meddelanden för borttagningskommandot DEL.

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

Attribut

Parameter Beskrivning Obligatoriskt Standardvärde
Connection Namnet på programinställningen som innehåller cacheminnet anslutningssträng, till exempel:<cacheName>.redis.cache.windows.net:6380,password... Ja
Channel Pubunderkanalen som utlösaren ska lyssna på. Stöder kanalmönster i globformat. Det här fältet kan lösas med hjälp av INameResolver. Ja

Kommentarer

Parameter Beskrivning Obligatoriskt Standardvärde
name Namnet på variabeln som innehåller värdet som returneras av funktionen. Ja
connection Namnet på programinställningen som innehåller cacheminnet anslutningssträng, till exempel:<cacheName>.redis.cache.windows.net:6380,password... Ja
channel Pubunderkanalen som utlösaren ska lyssna på. Stöder kanalmönster i globformat. Ja

Konfiguration

function.json egenskap beskrivning Obligatoriskt Standardvärde
type Utlösartyp. För pubunderutlösaren är redisPubSubTriggertypen . Ja
connection Namnet på programinställningen som innehåller cacheminnet anslutningssträng, till exempel:<cacheName>.redis.cache.windows.net:6380,password... Ja
channel Namnet på pubunderkanalen som prenumereras på Ja
name Namnet på variabeln som innehåller värdet som returneras av funktionen. Ja
direction Måste anges till in. Ja

Viktigt!

Parametern connection innehåller inte Själva Redis-cachen anslutningssträng. I stället pekar den på namnet på miljövariabeln som innehåller anslutningssträng. Detta gör programmet säkrare. Mer information finns i Redis anslutningssträng.

Användning

Redis-funktioner publicerar/prenumererar funktioner som gör att meddelanden kan skickas till Redis och sändas till prenumeranter. Gör RedisPubSubTrigger att Azure Functions kan utlösas vid pub-/underaktivitet. Prenumererar RedisPubSubTriggerpå ett specifikt kanalmönster med hjälp av PSUBSCRIBEoch ytbehandlar meddelanden som tas emot på dessa kanaler till funktionen.

Förutsättningar och begränsningar

  • RedisPubSubTrigger Kan inte lyssna på keyspace-meddelanden i klustrade cacheminnen.
  • Funktioner på grundläggande nivå stöder inte utlösande av keyspace eller keyevent meddelanden via RedisPubSubTrigger.
  • RedisPubSubTrigger Stöds inte i en förbrukningsplan eftersom Redis PubSub kräver att klienter alltid aktivt lyssnar för att ta emot alla meddelanden. För förbrukningsplaner kan funktionen missa vissa meddelanden som publicerats till kanalen.
  • Funktioner med RedisPubSubTrigger ska inte skalas ut till flera instanser. Varje instans lyssnar och bearbetar varje pubundermeddelande, vilket resulterar i duplicerad bearbetning.

Varning

Den här utlösaren stöds inte i en förbrukningsplan eftersom Redis PubSub kräver att klienter alltid aktivt lyssnar för att ta emot alla meddelanden. För förbrukningsplaner kan funktionen missa vissa meddelanden som publicerats till kanalen.

Utlöses på keyspace-meddelanden

Redis erbjuder ett inbyggt koncept som kallas keyspace-meddelanden. När den här funktionen är aktiverad publicerar den meddelanden om en mängd olika cacheåtgärder till en dedikerad pub/underkanal. Åtgärder som stöds omfattar åtgärder som påverkar specifika nycklar, så kallade keyspace-meddelanden och specifika kommandon som kallas keyevent-meddelanden. Ett stort antal Redis-åtgärder stöds, till exempel SET, DELoch EXPIRE. Den fullständiga listan finns i dokumentationen för keyspace-meddelanden.

Meddelandena keyspace och keyevent publiceras med följande syntax:

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

Eftersom dessa händelser publiceras på pub-/underkanaler kan de RedisPubSubTrigger hämtas. Se avsnittet RedisPubSubTrigger för fler exempel.

Viktigt!

I Azure Cache for Redis keyspace måste händelser aktiveras innan meddelanden publiceras. Mer information finns i Avancerat Inställningar.

Typ Beskrivning
string Kanalmeddelandet serialiserat som JSON (UTF-8 kodat för bytetyper) i följande format.
Custom Utlösaren använder Json.NET serialisering för att mappa meddelandet från kanalen till den angivna anpassade typen.

JSON-strängformat

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

Typ Beskrivning
string Kanalmeddelandet serialiserat som JSON (UTF-8 kodat för bytetyper) i följande format.
Custom Utlösaren använder Json.NET serialisering för att mappa meddelandet från kanalen från en string till en anpassad typ.
{
  "SubscriptionChannel":"__keyspace@0__:*",
  "Channel":"__keyspace@0__:mykey",
  "Message":"set"
}