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ı pubsubTest
dinler.
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ı keyspaceTest
iç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 DEL
iç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ı pubsubTest
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 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ı myKey
iç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 DEL
iç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 RedisPubSubTrigger
belirli bir kanal desenine PSUBSCRIBE
abone 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 veyakeyevent
aracılığıylaRedisPubSubTrigger
bildirim 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. , DEL
ve EXPIRE
gibi 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"
}
İlgili içerik
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin