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 keyspaceTest
geluisterd.
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 DEL
Verwijderen 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",
pattern = false)
String message,
final ExecutionContext context) {
context.getLogger().info(message);
}
}
In dit voorbeeld worden eventuele keyspace-meldingen voor de sleutel myKey
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 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);
}
}
In dit voorbeeld worden eventuele keyevent
meldingen voor de opdracht DEL
Verwijderen 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",
pattern = false)
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 pubsubTest
te luisteren.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
Hier zijn bindingsgegevens om naar keyspace-meldingen voor de sleutel keyspaceTest
te luisteren.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
Hier vindt u bindingsgegevens om te luisteren naar keyevent
meldingen voor de opdracht DEL
Verwijderen.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"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 pubsubTest
te luisteren.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
Hier zijn bindingsgegevens om naar keyspace-meldingen voor de sleutel keyspaceTest
te luisteren.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
Hier vindt u bindingsgegevens om te luisteren naar keyevent
meldingen voor de opdracht DEL
Verwijderen.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"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 pubsubTest
te luisteren.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Hier zijn bindingsgegevens om naar keyspace-meldingen voor de sleutel keyspaceTest
te luisteren.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Hier vindt u bindingsgegevens om te luisteren naar keyevent
meldingen voor de opdracht DEL
Verwijderen.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"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 redisPubSubTrigger het type. |
Ja | |
connection |
De naam van de toepassingsinstelling die de cache-verbindingsreeks bevat, zoals:<cacheName>.redis.cache.windows.net:6380,password... |
Ja | |
channel |
De naam van het pub-subkanaal waarop een abonnement wordt uitgevoerd. | Ja | |
pattern |
Een Booleaanse waarde om aan te geven dat het opgegeven kanaal gebruikmaakt van patroonberekeningen. Als pattern dit waar is, wordt het kanaal behandeld als een glob-stijlpatroon in plaats van als een letterlijk patroon. |
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 RedisPubSubTrigger
abonneert zich op een specifiek kanaalpatroon met behulp van PSUBSCRIBE
en 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
ofkeyevent
meldingen via deRedisPubSubTrigger
. - 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
, DEL
en 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 Geavanceerde 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"
}