RedisPubSubTrigger pour Azure Functions
Redis propose une fonctionnalité de publication/d’abonnement qui permet d’envoyer des messages à Redis et de les diffuser aux abonnés.
Pour plus d’informations sur les déclencheurs et les liaisons Azure Cache pour Redis, l’extension Redis pour Azure Functions.
Étendue de la disponibilité des déclencheurs de fonctions
Type de déclencheur | Redis managé par Azure | Cache Azure pour Redis |
---|---|---|
Déclencheur de publication/d’abonnement | Oui | Oui |
Important
Lorsque vous utilisez Azure Managed Redis ou les niveaux Entreprise de Azure Cache pour Redis, utilisez le port 10000 plutôt que le port 6380 ou 6379.
Avertissement
Ce déclencheur n’est pas pris en charge sur un plan de consommation , car Redis PubSub exige que les clients soient toujours à l’écoute active pour recevoir tous les messages. Pour les plans de consommation, votre fonction peut manquer certains messages publiés sur le canal.
Important
Le modèle Node.js v4 pour Functions n’est pas encore pris en charge par l’extension Azure Cache pour Redis. Pour plus d’informations sur le fonctionnement du modèle v4, reportez-vous au guide du développeur Azure Functions Node.js. Pour plus d’informations sur les différences entre v3 et v4, consultez le guide de migration.
Important
Le modèle Python v2 pour Functions n’est pas encore pris en charge par l’extension Azure Cache pour Redis. Pour plus d’informations sur le fonctionnement du modèle v2, consultez le guide du développeur Python sur Azure Functions.
Exemples
Modèle d’exécution | Description |
---|---|
Modèle de worker isolé | Le code de votre fonction s’exécute dans un processus Worker .NET distinct. Utilisez avec les versions prises en charge de .NET et .NET Framework. Pour plus d’informations, consultez Développer les fonctions de processus Worker isolé .NET. |
Modèle in-process | Le code de votre fonction s’exécute dans le même processus que le processus hôte Functions. Prend uniquement en charge les versions LTS (Long Term Support) de .NET. Pour plus d’informations, consultez Développer des fonctions de bibliothèque de classes .NET. |
Important
Pour les fonctions .NET, il est recommandé d’utiliser le modèle de Worker isolé plutôt que le modèle in-process. Pour une comparaison des modèles worker in-process et isolés , consultez les différences entre le modèle worker isolé et le modèle in-process pour .NET sur Azure Functions.
Cet exemple écoute le canal 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);
}
}
}
Cet exemple écoute toutes les notifications d’espace de clés pour la clé 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);
}
}
}
Cet exemple écoute toutes les notifications keyevent
pour la commande de suppression 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.");
}
}
}
Cet exemple écoute le canal 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);
}
}
Cet exemple écoute toutes les notifications d’espace de clés pour la clé 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",
pattern = false)
String message,
final ExecutionContext context) {
context.getLogger().info(message);
}
}
Cet exemple écoute toutes les notifications keyevent
pour la commande de suppression 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",
pattern = false)
String message,
final ExecutionContext context) {
context.getLogger().info(message);
}
}
Cet exemple utilise le même index.js
fichier, avec des données de liaison dans le fichier déterminant sur quel function.json
canal le déclencheur se produit.
Voici le fichier index.js
:
module.exports = async function (context, message) {
context.log(message);
}
À partir de function.json
:
Voici des données de liaison permettant d’écouter le canal pubsubTest
.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
Voici des données de liaison permettant d’écouter les notifications d’espace de clés pour la clé keyspaceTest
.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
Voici des données de liaison permettant d’écouter les notifications keyevent
pour la commande de suppression DEL
.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
Cet exemple utilise le même run.ps1
fichier, avec des données de liaison dans le fichier déterminant sur quel function.json
canal le déclencheur se produit.
Voici le fichier run.ps1
:
param($message, $TriggerMetadata)
Write-Host $message
À partir de function.json
:
Voici des données de liaison permettant d’écouter le canal pubsubTest
.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
Voici des données de liaison permettant d’écouter les notifications d’espace de clés pour la clé keyspaceTest
.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
Voici des données de liaison permettant d’écouter les notifications keyevent
pour la commande de suppression DEL
.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
Le modèle de programmation Python v1 vous oblige à définir des liaisons dans un fichier function.json distinct dans le dossier de fonction. Pour plus d’informations, consultez le guide des développeurs Python.
Cet exemple utilise le même __init__.py
fichier, avec des données de liaison dans le fichier déterminant sur quel function.json
canal le déclencheur se produit.
Voici le fichier __init__.py
:
import logging
def main(message: str):
logging.info(message)
À partir de function.json
:
Voici des données de liaison permettant d’écouter le canal pubsubTest
.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Voici des données de liaison permettant d’écouter les notifications d’espace de clés pour la clé keyspaceTest
.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Voici des données de liaison permettant d’écouter les notifications keyevent
pour la commande de suppression DEL
.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Attributs
Paramètre | Description | Obligatoire | Par défaut |
---|---|---|---|
Connection |
Nom du paramètre d’application qui contient le cache chaîne de connexion, par exemple :<cacheName>.redis.cache.windows.net:6380,password... |
Oui | |
Channel |
Le canal de publication/d’abonnement que le déclencheur doit écouter. Prend en charge les modèles de canal de style glob. Ce champ peut être résolu à l’aide de INameResolver . |
Oui |
Annotations
Paramètre | Description | Obligatoire | Par défaut |
---|---|---|---|
name |
Nom de la variable contenant la valeur retournée par la fonction. | Oui | |
connection |
Nom du paramètre d’application qui contient le cache chaîne de connexion, par exemple :<cacheName>.redis.cache.windows.net:6380,password... |
Oui | |
channel |
Le canal de publication/d’abonnement que le déclencheur doit écouter. Prend en charge les modèles de canal de style glob. | Oui |
Configuration
Propriété function.json | Description | Obligatoire | Par défaut |
---|---|---|---|
type |
Type de déclencher. Pour le sous-déclencheur pub, le type est redisPubSubTrigger . |
Oui | |
connection |
Nom du paramètre d’application qui contient le cache chaîne de connexion, par exemple :<cacheName>.redis.cache.windows.net:6380,password... |
Oui | |
channel |
Nom du sous-canal pub auquel il est abonné. | Oui | |
pattern |
Valeur booléenne pour indiquer que le canal donné utilise la correspondance de modèle. Si pattern c’est vrai, le canal est traité comme un modèle glob-style au lieu d’un littéral. |
Oui | |
name |
Nom de la variable contenant la valeur retournée par la fonction. | Oui | |
direction |
Cette propriété doit être définie sur in . |
Oui |
Important
Le paramètre connection
ne contient pas la chaîne de connexion du cache Redis elle-même. Au lieu de cela, il pointe vers le nom de la variable d’environnement qui contient la chaîne de connexion. De cette manière, l’application est plus sécurisée. Pour plus d’informations, consultez Chaîne de connexion Redis.
Utilisation
Redis propose une fonctionnalité de publication/d’abonnement qui permet d’envoyer des messages à Redis et de les diffuser aux abonnés. RedisPubSubTrigger
permet de déclencher Azure Functions lors de l’activité de publication/d’abonnement. RedisPubSubTrigger
s’abonne à un modèle de canal spécifique à l’aide de PSUBSCRIBE
et expose les messages reçus sur ces canaux à la fonction.
Conditions préalables et limitations
- le
RedisPubSubTrigger
n’est pas capable d’écouter les notifications d’espace de clés sur les caches cluster. - Les fonctions de niveau de base ne prennent pas en charge le déclenchement de notifications ou
keyspace
viakeyevent
leRedisPubSubTrigger
. RedisPubSubTrigger
n’est pas pris en charge sur un plan de consommation, car Redis PubSub exige que les clients soient toujours activement à l’écoute pour recevoir tous les messages. Pour les plans de consommation, votre fonction peut manquer certains messages publiés sur le canal.- Les fonctions avec
RedisPubSubTrigger
ne doivent pas être mises à l’échelle sur plusieurs instances. Chaque instance écoute et traite chaque sous-message pub, ce qui entraîne un traitement en double.
Avertissement
Ce déclencheur n’est pas pris en charge sur un plan de consommation , car Redis PubSub exige que les clients soient toujours à l’écoute active pour recevoir tous les messages. Pour les plans de consommation, votre fonction peut manquer certains messages publiés sur le canal.
Déclenchement sur les notifications d’espace de clés
Redis propose un concept intégré appelé notifications d’espace de clés. Lorsqu’elle est activée, cette fonctionnalité publie des notifications d’un large éventail d’actions de cache sur un canal pub/sous-canal dédié. Les actions prises en charge incluent des actions qui affectent des clés spécifiques, appelées notifications d’espace de clés, et des commandes spécifiques, appelées notifications d’événement clé. Un large éventail d’actions Redis sont prises en charge, telles que SET
, DEL
et EXPIRE
. La liste complète est présente dans la documentation notification de keyspace.
Les keyspace
notifications et keyevent
sont publiées avec la syntaxe suivante :
PUBLISH __keyspace@0__:<affectedKey> <command>
PUBLISH __keyevent@0__:<affectedCommand> <key>
Étant donné que ces événements sont publiés sur les canaux pub/sub, le RedisPubSubTrigger
est en mesure de les récupérer. Pour plus d’exemples, consultez la section RedisPubSubTrigger .
Important
Dans Azure Cache pour Redis, keyspace
les événements doivent être activés avant la publication des notifications. Pour plus d’informations, consultez la Paramètres avancés.
Type | Description |
---|---|
string |
Message de canal sérialisé en tant que JSON (encodé en UTF-8 pour les types d’octets) au format suivant. |
Custom |
Le déclencheur utilise Json.NET sérialisation pour mapper le message du canal dans le type personnalisé donné. |
Format de chaîne JSON
{
"SubscriptionChannel":"__keyspace@0__:*",
"Channel":"__keyspace@0__:mykey",
"Message":"set"
}
Type | Description |
---|---|
string |
Message de canal sérialisé en tant que JSON (encodé en UTF-8 pour les types d’octets) au format suivant. |
Custom |
Le déclencheur utilise la sérialisation Json.NET pour mapper le message du canal d’un string à un type personnalisé. |
{
"SubscriptionChannel":"__keyspace@0__:*",
"Channel":"__keyspace@0__:mykey",
"Message":"set"
}