RedisPubSubTrigger for Azure Functions (előzetes verzió)

A Redis-funkciók közzétételi/feliratkozási funkciói lehetővé teszik az üzenetek redisbe küldését és az előfizetőknek való közvetítését.

Az Azure Cache for Redis eseményindítóiról és kötéseiről az Azure Functions Redis-bővítménye nyújt további információt.

A függvényindítók rendelkezésre állásának hatóköre

Szint Alap Standard, Prémium Enterprise, Enterprise Flash
Pub/Sub Trigger Igen Igen Igen

Figyelmeztetés

Ez az eseményindító nem támogatott a használati csomagban , mert a Redis PubSub megköveteli, hogy az ügyfelek mindig aktívan hallgassák az összes üzenetet. A használati csomagok esetében előfordulhat, hogy a függvény kihagy bizonyos, a csatornán közzétett üzeneteket.

Fontos

A Functions Node.js v4-modelljét az Azure Cache for Redis bővítmény még nem támogatja. A v4-modell működésével kapcsolatos további információkért tekintse meg az Azure Functions Node.js fejlesztői útmutatóját. A v3 és a v4 közötti különbségekről a migrálási útmutatóban olvashat bővebben.

Fontos

A Functions Python v2-modelljét még nem támogatja az Azure Cache for Redis bővítmény. A v2-modell működésével kapcsolatos további részletekért tekintse meg az Azure Functions Python fejlesztői útmutatóját.

Példák

Végrehajtási modell Leírás
Izolált feldolgozói modell A függvénykód egy külön .NET-feldolgozófolyamatban fut. A .NET és a .NET-keretrendszer támogatott verzióival használható. További információ: .NET izolált feldolgozói folyamatfüggvények fejlesztése.
Folyamaton belüli modell A függvénykód ugyanabban a folyamatban fut, mint a Functions gazdafolyamata. Csak a .NET hosszú távú támogatási (LTS) verzióit támogatja. További információ: .NET-osztálykódtár-függvények fejlesztése.

Fontos

A .NET-függvények esetében az izolált feldolgozói modell használata javasolt a folyamaton belüli modellen keresztül. A folyamaton belüli és az izolált feldolgozói modellek összehasonlításához tekintse meg az izolált feldolgozói modell és az Azure Functions .NET-hez készült folyamaton belüli modellje közötti különbségeket.

Ez a minta figyeli a csatornát 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);
        }
    }
}

Ez a minta figyeli a kulcshoz keyspaceTesttartozó kulcstér-értesítéseket.

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

Ez a minta figyeli a törlési parancs DELértesítéseitkeyevent.

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

Ez a minta figyeli a csatornát 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);
    }
}

Ez a minta figyeli a kulcshoz myKeytartozó kulcstér-értesítéseket.

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

Ez a minta figyeli a törlési parancs DELértesítéseitkeyevent.

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

Ez a minta ugyanazt index.js a fájlt használja, kötési adatokkal a function.json fájlban, amely meghatározza, hogy az eseményindító melyik csatornán történik.

A fájl a index.js következő:

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

Feladó function.json:

Az alábbi kötési adatok a csatornát pubsubTestfigyelik.

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

Az alábbi kötési adatok a kulcs keyspaceTestkulcstérértesítéseit figyelik.

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

Az alábbi kötési adatokkal figyelheti a keyevent törlési parancs DELértesítéseit.

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

Ez a minta ugyanazt run.ps1 a fájlt használja, kötési adatokkal a function.json fájlban, amely meghatározza, hogy az eseményindító melyik csatornán történik.

A fájl a run.ps1 következő:

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

Feladó function.json:

Az alábbi kötési adatok a csatornát pubsubTestfigyelik.

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

Az alábbi kötési adatok a kulcs keyspaceTestkulcstérértesítéseit figyelik.

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

Az alábbi kötési adatokkal figyelheti a keyevent törlési parancs DELértesítéseit.

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

A Python v1 programozási modell megköveteli, hogy a függvénymappában egy külön function.json fájlban definiáljon kötéseket. További információt a Python fejlesztői útmutatójában talál.

Ez a minta ugyanazt __init__.py a fájlt használja, kötési adatokkal a function.json fájlban, amely meghatározza, hogy az eseményindító melyik csatornán történik.

A fájl a __init__.py következő:

import logging

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

Feladó function.json:

Az alábbi kötési adatok a csatornát pubsubTestfigyelik.

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

Az alábbi kötési adatok a kulcs keyspaceTestkulcstérértesítéseit figyelik.

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

Az alábbi kötési adatokkal figyelheti a keyevent törlési parancs DELértesítéseit.

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

Attribútumok

Paraméter Leírás Kötelező Alapértelmezett
Connection A gyorsítótárat kapcsolati sztring tartalmazó alkalmazásbeállítás neve, például:<cacheName>.redis.cache.windows.net:6380,password... Igen
Channel A pub alcsatornája, amelyet az eseményindítónak figyelnie kell. Támogatja a glob stílusú csatornamintákat. Ez a mező a következővel INameResolveroldható fel: . Igen

Jegyzetek

Paraméter Leírás Kötelező Alapértelmezett
name A függvény által visszaadott értéket tartalmazó változó neve. Igen
connection A gyorsítótárat kapcsolati sztring tartalmazó alkalmazásbeállítás neve, például:<cacheName>.redis.cache.windows.net:6380,password... Igen
channel A pub alcsatornája, amelyet az eseményindítónak figyelnie kell. Támogatja a glob stílusú csatornamintákat. Igen

Konfiguráció

function.json tulajdonság Leírás Kötelező Alapértelmezett
type Eseményindító típusa. A pub sub trigger esetében a típus a következő redisPubSubTrigger: . Igen
connection A gyorsítótárat kapcsolati sztring tartalmazó alkalmazásbeállítás neve, például:<cacheName>.redis.cache.windows.net:6380,password... Igen
channel Annak a pub-alcsatornának a neve, amelyre előfizetnek Igen
name A függvény által visszaadott értéket tartalmazó változó neve. Igen
direction A beállításnak a inkövetkezőnek kell lennie: . Igen

Fontos

A connection paraméter nem tartalmazza a Redis-gyorsítótárat, kapcsolati sztring magát. Ehelyett a kapcsolati sztring tároló környezeti változó nevére mutat. Ez biztonságosabbá teszi az alkalmazást. További információ: Redis kapcsolati sztring.

Használat

A Redis-funkciók közzétételi/feliratkozási funkciói lehetővé teszik az üzenetek redisbe küldését és az előfizetőknek való közvetítését. Ez RedisPubSubTrigger lehetővé teszi, hogy az Azure Functions pub/altevékenység esetén aktiválódjon. A RedisPubSubTriggerrendszer feliratkozik egy adott csatornamintára PSUBSCRIBE, és megjeleníti az ezeken a csatornákon fogadott üzeneteket a függvénynek.

Előfeltételek és korlátozások

  • Ez RedisPubSubTrigger nem képes figyelni a kulcstér-értesítéseket a fürtözött gyorsítótárakon.
  • Az alapszintű függvények nem támogatják a be- keyspace és keyevent értesítések indítását a RedisPubSubTrigger.
  • A RedisPubSubTrigger használati csomag nem támogatott, mert a Redis PubSub megköveteli, hogy az ügyfelek mindig aktívan hallgassák az összes üzenetet. A használati csomagok esetében előfordulhat, hogy a függvény kihagy bizonyos, a csatornán közzétett üzeneteket.
  • A függvényeket RedisPubSubTrigger nem szabad több példányra skálázni. Minden példány figyeli és feldolgozza az egyes pub-alüzeneteket, ami duplikált feldolgozást eredményez.

Figyelmeztetés

Ez az eseményindító nem támogatott a használati csomagban , mert a Redis PubSub megköveteli, hogy az ügyfelek mindig aktívan hallgassák az összes üzenetet. A használati csomagok esetében előfordulhat, hogy a függvény kihagy bizonyos, a csatornán közzétett üzeneteket.

Aktiválás kulcstérértesítéseken

A Redis egy beépített koncepciót, az úgynevezett keyspace-értesítéseket kínál. Ha engedélyezve van, ez a funkció a gyorsítótárműveletek széles skáláját teszi közzé egy dedikált pubban/alcsatornában. A támogatott műveletek közé tartoznak az adott kulcsokat érintő műveletek, az úgynevezett kulcstérértesítések és bizonyos parancsok, az úgynevezett keyevent-értesítések. Számos Redis-művelet támogatott, például SET: , DELés EXPIRE. A teljes lista a kulcstér értesítési dokumentációjában található.

A keyspace rendszer keyevent az alábbi szintaxissal teszi közzé az értesítéseket:

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

Mivel ezek az események pub/alcsatornákon vannak közzétéve, a RedisPubSubTrigger rendszer képes felvenni őket. További példákért tekintse meg a RedisPubSubTrigger szakaszt.

Fontos

Az Azure Cache for Redisben keyspace az értesítések közzététele előtt engedélyezni kell az eseményeket. További információ: Speciális Gépház.

Típus Leírás
string A csatornaüzenet JSON-ként (bájttípusokhoz kódolt UTF-8) szerializálva az alábbi formátumban.
Custom Az eseményindító Json.NET szerializálással képezi le a csatorna üzenetét az adott egyéni típusra.

JSON-sztringformátum

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

Típus Leírás
string A csatornaüzenet JSON-ként (bájttípusokhoz kódolt UTF-8) szerializálva az alábbi formátumban.
Custom Az eseményindító Json.NET szerializálással képezi le a csatorna üzenetét egy string egyéni típusba.
{
  "SubscriptionChannel":"__keyspace@0__:*",
  "Channel":"__keyspace@0__:mykey",
  "Message":"set"
}