RedisPubSubTrigger az Azure Functionshez
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 keyspaceTest
tartozó 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",
pattern = false)
String message,
final ExecutionContext context) {
context.getLogger().info(message);
}
}
Ez a minta figyeli a kulcshoz myKey
tartozó 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",
pattern = false)
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",
pattern = false)
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 pubsubTest
figyelik.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
Az alábbi kötési adatok a kulcs keyspaceTest
kulcstérértesítéseit figyelik.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"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",
"pattern": false,
"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 pubsubTest
figyelik.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
Az alábbi kötési adatok a kulcs keyspaceTest
kulcstérértesítéseit figyelik.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"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",
"pattern": false,
"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 pubsubTest
figyelik.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Az alábbi kötési adatok a kulcs keyspaceTest
kulcstérértesítéseit figyelik.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"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",
"pattern": false,
"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 INameResolver oldható 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 | |
pattern |
Egy logikai érték, amely azt jelzi, hogy az adott csatorna mintamaktikát használ. Ha pattern igaz, akkor a csatorna a literál helyett glob stílusú mintaként lesz kezelve. |
Igen | |
name |
A függvény által visszaadott értéket tartalmazó változó neve. | Igen | |
direction |
A beállításnak a in kö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 RedisPubSubTrigger
rendszer 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
éskeyevent
értesítések indítását aRedisPubSubTrigger
. - 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 beállítások.
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"
}