Aracılığıyla paylaş


Azure İşlevleri için RedisPubSubTrigger

Redis, iletilerin Redis'e gönderilmesini ve abonelere yayımlanmasını sağlayan yayımlama/abone olma işlevlerine sahiptir.

Redis için Azure Cache tetikleyicileri ve bağlamaları hakkında daha fazla bilgi için Azure İşlevleri için Redis Uzantısı.

İşlev tetikleyicileri için kullanılabilirlik kapsamı

Katman Temel Standart, Premium Enterprise, Enterprise Flash
Pub/Sub Tetikleyicisi Yes Evet Yes

Uyarı

Redis PubSub istemcilerin her zaman tüm iletileri almak için etkin bir şekilde dinlemesini gerektirdiği için bu tetikleyici bir tüketim planında desteklenmez. Tüketim planları için, işleviniz kanalda yayımlanan belirli iletileri kaçırabilir.

Önemli

İşlevler için Node.js v4 modeli henüz Redis için Azure Cache uzantısı tarafından desteklenmiyor. v4 modelinin nasıl çalıştığı hakkında daha fazla bilgi için Azure İşlevleri Node.js geliştirici kılavuzuna bakın. v3 ile v4 arasındaki farklar hakkında daha fazla bilgi edinmek için geçiş kılavuzuna bakın.

Önemli

İşlevler için Python v2 modeli henüz Redis için Azure Cache uzantısı tarafından desteklenmiyor. v2 modelinin nasıl çalıştığı hakkında daha fazla bilgi için Azure İşlevleri Python geliştirici kılavuzuna bakın.

Örnekler

Yürütme modeli Açıklama
Yalıtılmış çalışan modeli İşlev kodunuz ayrı bir .NET çalışan işleminde çalışır. Desteklenen .NET ve .NET Framework sürümleriyle kullanın. Daha fazla bilgi edinmek için bkz . .NET yalıtılmış çalışan işlemi işlevleri geliştirme.
İşlem içi model İşlev kodunuz İşlevler konak işlemiyle aynı işlemde çalışır. .NET'in yalnızca Uzun Süreli Destek (LTS) sürümlerini destekler. Daha fazla bilgi edinmek için bkz . .NET sınıf kitaplığı işlevleri geliştirme.

Önemli

.NET işlevleri için, işlem içi model üzerinde yalıtılmış çalışan modelinin kullanılması önerilir. İşlem içi ve yalıtılmış çalışan modellerinin karşılaştırması için bkz. yalıtılmış çalışan modeli ile Azure İşlevleri üzerinde .NET için işlem içi model arasındaki farklar.

Bu örnek kanalını pubsubTestdinler.

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

Bu örnek, anahtarı keyspaceTestiçin tüm keyspace bildirimlerini dinler.

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

Bu örnek, delete komutu DELiçin tüm keyevent bildirimleri dinler.

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

Bu örnek kanalını pubsubTestdinler.

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

Bu örnek, anahtarı myKeyiçin tüm keyspace bildirimlerini dinler.

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

Bu örnek, delete komutu DELiçin tüm keyevent bildirimleri dinler.

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

Bu örnek, tetikleyicinin hangi kanalda gerçekleştiğini belirleyen dosyadaki function.json bağlama verileriyle aynı index.js dosyayı kullanır.

Dosya şu şekildedir index.js :

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

Kimden function.json:

Kanalı dinlemek için verileri bağlama aşağıdadır pubsubTest.

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

Anahtar için keyspace bildirimlerini dinlemek için verileri bağlama aşağıdadır keyspaceTest.

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

Delete komutuna yönelik bildirimleri dinlemek keyevent için verileri bağlama aşağıdadır DEL.

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

Bu örnek, tetikleyicinin hangi kanalda gerçekleştiğini belirleyen dosyadaki function.json bağlama verileriyle aynı run.ps1 dosyayı kullanır.

Dosya şu şekildedir run.ps1 :

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

Kimden function.json:

Kanalı dinlemek için verileri bağlama aşağıdadır pubsubTest.

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

Anahtar için keyspace bildirimlerini dinlemek için verileri bağlama aşağıdadır keyspaceTest.

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

Delete komutuna yönelik bildirimleri dinlemek keyevent için verileri bağlama aşağıdadır DEL.

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

Python v1 programlama modeli, işlev klasöründeki ayrı bir function.json dosyasında bağlamaları tanımlamanızı gerektirir. Daha fazla bilgi için bkz . Python geliştirici kılavuzu.

Bu örnek, tetikleyicinin hangi kanalda gerçekleştiğini belirleyen dosyadaki function.json bağlama verileriyle aynı __init__.py dosyayı kullanır.

Dosya şu şekildedir __init__.py :

import logging

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

Kimden function.json:

Kanalı dinlemek için verileri bağlama aşağıdadır pubsubTest.

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

Anahtar için keyspace bildirimlerini dinlemek için verileri bağlama aşağıdadır keyspaceTest.

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

Delete komutuna yönelik bildirimleri dinlemek keyevent için verileri bağlama aşağıdadır DEL.

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

Özellikler

Parametre Açıklama Zorunlu Varsayılan
Connection Önbellek bağlantı dizesi içeren uygulama ayarının adı, örneğin:<cacheName>.redis.cache.windows.net:6380,password... Yes
Channel Tetikleyicinin dinlemesi gereken pub alt kanalı. Glob stili kanal desenlerini destekler. Bu alan kullanılarak INameResolverçözümlenebilir. Yes

Ek Açıklamalar

Parametre Açıklama Zorunlu Varsayılan
name İşlev tarafından döndürülen değeri tutan değişkenin adı. Yes
connection Önbellek bağlantı dizesi içeren uygulama ayarının adı, örneğin:<cacheName>.redis.cache.windows.net:6380,password... Yes
channel Tetikleyicinin dinlemesi gereken pub alt kanalı. Glob stili kanal desenlerini destekler. Yes

Yapılandırma

function.json özelliği Açıklama Zorunlu Varsayılan
type Tetikleyici türü. Pub alt tetikleyicisi için türü şeklindedir redisPubSubTrigger. Yes
connection Önbellek bağlantı dizesi içeren uygulama ayarının adı, örneğin:<cacheName>.redis.cache.windows.net:6380,password... Yes
channel Abone olunan pub alt kanalının adı Yes
name İşlev tarafından döndürülen değeri tutan değişkenin adı. Yes
direction olarak ayarlanmalıdır in. Yes

Önemli

connection parametresi Redis önbelleğini bağlantı dizesi tutmaz. Bunun yerine, bağlantı dizesi tutan ortam değişkeninin adını gösterir. Bu, uygulamayı daha güvenli hale getirir. Daha fazla bilgi için bkz. Redis bağlantı dizesi.

Kullanım

Redis, iletilerin Redis'e gönderilmesini ve abonelere yayımlanmasını sağlayan yayımlama/abone olma işlevlerine sahiptir. Azure İşlevleri RedisPubSubTrigger pub/sub etkinliğinde tetiklenebilir. kullanarak RedisPubSubTriggerbelirli bir kanal desenine PSUBSCRIBEabone olur ve bu kanallarda alınan iletileri işleve gösterir.

Ön koşullar ve sınırlamalar

  • RedisPubSubTrigger kümelenmiş önbelleklerde keyspace bildirimlerini dinleme özelliğine sahip değildir.
  • Temel katman işlevleri, üzerinde keyspace tetikleme veya keyevent aracılığıyla RedisPubSubTriggerbildirim almayı desteklemez.
  • RedisPubSubTrigger Redis PubSub, istemcilerin her zaman tüm iletileri almak için etkin bir şekilde dinlemesini gerektirdiğinden tüketim planında desteklenmez. Tüketim planları için, işleviniz kanalda yayımlanan belirli iletileri kaçırabilir.
  • ile işlevlerin RedisPubSubTrigger ölçeği birden çok örneğe genişletilmemelidir. Her örnek, her pub alt iletisini dinler ve işler ve yinelenen işlemeyle sonuçlanır.

Uyarı

Redis PubSub istemcilerin her zaman tüm iletileri almak için etkin bir şekilde dinlemesini gerektirdiği için bu tetikleyici bir tüketim planında desteklenmez. Tüketim planları için, işleviniz kanalda yayımlanan belirli iletileri kaçırabilir.

Anahtar alanı bildirimlerini tetikleme

Redis, keyspace notifications adlı yerleşik bir kavram sunar. Bu özellik etkinleştirildiğinde, çok çeşitli önbellek eylemlerinin bildirimlerini ayrılmış bir pub/alt kanalda yayımlar. Desteklenen eylemler, anahtar alanı bildirimleri olarak adlandırılan belirli anahtarları etkileyen eylemleri ve keyevent bildirimleri olarak adlandırılan belirli komutları içerir. , DELve EXPIREgibi SETçok çeşitli Redis eylemleri desteklenir. Listenin tamamı keyspace bildirim belgelerinde bulunabilir.

keyspace ve keyevent bildirimleri aşağıdaki söz dizimiyle yayımlanır:

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

Bu etkinlikler pub/sub kanallarında yayımlandığından RedisPubSubTrigger , bunları alabilir. Daha fazla örnek için RedisPubSubTrigger bölümüne bakın.

Önemli

Redis için Azure Cache'da, keyspace bildirimler yayımlanmadan önce olayların etkinleştirilmesi gerekir. Daha fazla bilgi için bkz . Gelişmiş Ayarlar.

Type Açıklama
string Kanal iletisi, aşağıdaki biçimde JSON (bayt türleri için kodlanmış UTF-8) olarak seri hale getirilir.
Custom Tetikleyici, kanaldaki iletiyi verilen özel türe eşlemek için Json.NET serileştirme kullanır.

JSON dize biçimi

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

Type Açıklama
string Kanal iletisi, aşağıdaki biçimde JSON (bayt türleri için kodlanmış UTF-8) olarak seri hale getirilir.
Custom Tetikleyici, bir kanalındaki string iletiyi özel bir türe eşlemek için Json.NET serileştirme kullanır.
{
  "SubscriptionChannel":"__keyspace@0__:*",
  "Channel":"__keyspace@0__:mykey",
  "Message":"set"
}