RedisPubSubTrigger لوظائف Azure
تتميز Redis بوظائف النشر/الاشتراك التي تمكن من إرسال الرسائل إلى Redis وبثها للمشتركين.
لمزيد من المعلومات حول مشغلات وروابط Azure Cache for Redis، ملحق Redis لوظائف Azure.
نطاق توفر مشغلات الوظائف
المستوى | أساسي | قياسي، متميز | Enterprise وEnterprise Flash |
---|---|---|---|
مشغل Pub/Sub | نعم | نعم | نعم |
تحذير
هذا المشغل غير مدعوم في خطة استهلاك لأن Redis PubSub يتطلب من العملاء الاستماع بنشاط دائما لتلقي جميع الرسائل. بالنسبة لخطط الاستهلاك، قد تفوت دالتك بعض الرسائل المنشورة على القناة.
هام
نموذج Python v2 للوظائف غير مدعوم حتى الآن بواسطة ملحق Azure Cache for Redis. لمزيد من التفاصيل حول كيفية عمل نموذج v2، راجع دليل مطور Azure Functions Python.
الأمثلة
نموذج التنفيذ | الوصف |
---|---|
نموذج عامل معزول | تعمل تعليمة دالتك البرمجية في عملية عامل .NET منفصلة. استخدم مع الإصدارات المدعومة من .NET و.NET Framework. لمعرفة المزيد، راجع تطوير وظائف معالجة العامل المعزولة .NET. |
نموذج قيد المعالجة | تعمل تعليمة دالتك البرمجية في نفس العملية مثل عملية مضيف الدالات. يدعم إصدارات الدعم طويل الأجل (LTS) فقط من .NET. لمعرفة المزيد، راجع تطوير وظائف مكتبة فئة .NET. |
هام
بالنسبة لوظائف .NET، يوصى باستخدام نموذج العامل المعزول عبر النموذج قيد المعالجة. للمقارنة بين نماذج العامل قيد المعالجة والنموذج المعزول ، راجع الاختلافات بين نموذج العامل المعزول والنموذج قيد المعالجة ل .NET على Azure Functions.
يستمع هذا النموذج إلى القناة 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);
}
}
}
يستمع هذا النموذج إلى أي إعلامات مساحة مفتاح للمفتاح 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);
}
}
}
يستمع هذا النموذج إلى أي keyevent
إعلامات لأمر 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.");
}
}
}
يستمع هذا النموذج إلى القناة 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);
}
}
يستمع هذا النموذج إلى أي إعلامات مساحة مفتاح للمفتاح 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);
}
}
يستمع هذا النموذج إلى أي keyevent
إعلامات لأمر 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);
}
}
يستخدم هذا النموذج نفس index.js
الملف، مع تحديد بيانات الربط في function.json
الملف على القناة التي يحدث فيها المشغل.
index.js
إليك الملف:
module.exports = async function (context, message) {
context.log(message);
}
من function.json
:
إليك بيانات الربط للاستماع إلى القناة pubsubTest
.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
فيما يلي بيانات الربط للاستماع إلى إعلامات مساحة المفاتيح للمفتاح keyspaceTest
.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
فيما يلي بيانات الربط للاستماع إلى keyevent
الإعلامات لأمر DEL
الحذف .
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
يستخدم هذا النموذج نفس run.ps1
الملف، مع تحديد بيانات الربط في function.json
الملف على القناة التي يحدث فيها المشغل.
run.ps1
إليك الملف:
param($message, $TriggerMetadata)
Write-Host $message
من function.json
:
إليك بيانات الربط للاستماع إلى القناة pubsubTest
.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
فيما يلي بيانات الربط للاستماع إلى إعلامات مساحة المفاتيح للمفتاح keyspaceTest
.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
فيما يلي بيانات الربط للاستماع إلى keyevent
الإعلامات لأمر DEL
الحذف .
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
يتطلب منك نموذج برمجة Python v1 تعريف الروابط في ملف function.json منفصل في مجلد الدالة. لمزيد من المعلومات، راجع دليل مطور Python.
يستخدم هذا النموذج نفس __init__.py
الملف، مع تحديد بيانات الربط في function.json
الملف على القناة التي يحدث فيها المشغل.
__init__.py
إليك الملف:
import logging
def main(message: str):
logging.info(message)
من function.json
:
إليك بيانات الربط للاستماع إلى القناة pubsubTest
.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "pubsubTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
فيما يلي بيانات الربط للاستماع إلى إعلامات مساحة المفاتيح للمفتاح keyspaceTest
.
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyspace@0__:keyspaceTest",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
فيما يلي بيانات الربط للاستماع إلى keyevent
الإعلامات لأمر DEL
الحذف .
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
السمات
المعلمة | الوصف | مطلوبة | افتراضي |
---|---|---|---|
Connection |
اسم إعداد التطبيق الذي يحتوي على سلسلة الاتصال ذاكرة التخزين المؤقت، مثل:<cacheName>.redis.cache.windows.net:6380,password... |
نعم | |
Channel |
القناة الفرعية للحانة التي يجب أن يستمع إليها المشغل. يدعم أنماط قناة على غرار glob. يمكن حل هذا الحقل باستخدام INameResolver . |
نعم |
تعليقات توضيحية
المعلمة | الوصف | مطلوبة | افتراضي |
---|---|---|---|
name |
اسم المتغير الذي يحمل القيمة التي تم إرجاعها بواسطة الدالة . | نعم | |
connection |
اسم إعداد التطبيق الذي يحتوي على سلسلة الاتصال ذاكرة التخزين المؤقت، مثل:<cacheName>.redis.cache.windows.net:6380,password... |
نعم | |
channel |
القناة الفرعية للحانة التي يجب أن يستمع إليها المشغل. يدعم أنماط قناة على غرار glob. | نعم |
التكوين
خاصية function.json | الوصف | مطلوبة | افتراضي |
---|---|---|---|
type |
نوع المشغل. بالنسبة إلى المشغل الفرعي للحانة، يكون النوع هو redisPubSubTrigger . |
نعم | |
connection |
اسم إعداد التطبيق الذي يحتوي على سلسلة الاتصال ذاكرة التخزين المؤقت، مثل:<cacheName>.redis.cache.windows.net:6380,password... |
نعم | |
channel |
اسم القناة الفرعية للحانة التي يتم الاشتراك فيها. | نعم | |
pattern |
قيمة منطقية للإشارة إلى أن القناة المحددة تستخدم عملية حساب النمط. إذا كان pattern صحيحا، التعامل مع القناة كنمط نمط glob بدلا من أن تكون حرفية. |
نعم | |
name |
اسم المتغير الذي يحمل القيمة التي تم إرجاعها بواسطة الدالة . | نعم | |
direction |
يجب تعيينه إلى in . |
نعم |
هام
connection
لا تحتفظ المعلمة بذاكرة التخزين المؤقت Redis سلسلة الاتصال نفسها. بدلا من ذلك، يشير إلى اسم متغير البيئة الذي يحتوي على سلسلة الاتصال. وهذا يجعل التطبيق أكثر أمانا. لمزيد من المعلومات، راجع Redis سلسلة الاتصال.
الاستخدام
تتميز Redis بوظائف النشر/الاشتراك التي تمكن من إرسال الرسائل إلى Redis وبثها للمشتركين. يتيح RedisPubSubTrigger
تشغيل Azure Functions في نشاط pub/sub. يشترك في RedisPubSubTrigger
نمط قناة معين باستخدام PSUBSCRIBE
، ويسطح الرسائل المستلمة على تلك القنوات إلى الوظيفة.
المتطلبات الأساسية والقيود
RedisPubSubTrigger
غير قادر على الاستماع إلى إعلامات مساحة المفاتيح على ذاكرات التخزين المؤقت المجمعة.- لا تدعم وظائف المستوى الأساسي تشغيل
keyspace
أوkeyevent
الإعلامات من خلالRedisPubSubTrigger
. RedisPubSubTrigger
لا يتم دعم في خطة الاستهلاك لأن Redis PubSub يتطلب من العملاء الاستماع بنشاط دائما لتلقي جميع الرسائل. بالنسبة لخطط الاستهلاك، قد تفوت دالتك بعض الرسائل المنشورة على القناة.- لا ينبغي توسيع الدوال التي
RedisPubSubTrigger
بها إلى مثيلات متعددة. يستمع كل مثيل ويعالج كل رسالة فرعية للحانة، ما يؤدي إلى معالجة مكررة.
تحذير
هذا المشغل غير مدعوم في خطة استهلاك لأن Redis PubSub يتطلب من العملاء الاستماع بنشاط دائما لتلقي جميع الرسائل. بالنسبة لخطط الاستهلاك، قد تفوت دالتك بعض الرسائل المنشورة على القناة.
تشغيل إعلامات مساحة المفاتيح
يقدم Redis مفهوما مضمنا يسمى إشعارات مساحة المفاتيح. عند التمكين، تنشر هذه الميزة إعلامات بمجموعة واسعة من إجراءات ذاكرة التخزين المؤقت إلى قناة pub/sub مخصصة. تتضمن الإجراءات المدعومة الإجراءات التي تؤثر على مفاتيح معينة، تسمى إعلامات مساحة المفاتيح، والأوامر المحددة، تسمى إعلامات keyevent. يتم دعم مجموعة كبيرة من إجراءات Redis، مثل SET
و DEL
و EXPIRE
. يمكن العثور على القائمة الكاملة في وثائق إعلام مساحة المفاتيح.
keyspace
يتم نشر الإعلامات و keyevent
باستخدام بناء الجملة التالي:
PUBLISH __keyspace@0__:<affectedKey> <command>
PUBLISH __keyevent@0__:<affectedCommand> <key>
نظرا لنشر هذه الأحداث على قنوات النشر/القنوات الفرعية RedisPubSubTrigger
، فإن قادرا على التقاطها. راجع قسم RedisPubSubTrigger للحصول على مزيد من الأمثلة.
هام
في Azure Cache for Redis، keyspace
يجب تمكين الأحداث قبل نشر الإعلامات. لمزيد من المعلومات، راجع الإعدادات المتقدمة.
النوع | الوصف |
---|---|
string |
تم تسلسل رسالة القناة بتنسيق JSON (UTF-8 مرمز لأنواع البايت) بالتنسيق التالي. |
Custom |
يستخدم المشغل تسلسل Json.NET لتعيين الرسالة من القناة إلى النوع المخصص المحدد. |
تنسيق سلسلة JSON
{
"SubscriptionChannel":"__keyspace@0__:*",
"Channel":"__keyspace@0__:mykey",
"Message":"set"
}
النوع | الوصف |
---|---|
string |
تم تسلسل رسالة القناة بتنسيق JSON (UTF-8 مرمز لأنواع البايت) بالتنسيق التالي. |
Custom |
يستخدم المشغل تسلسل Json.NET لتعيين الرسالة من القناة string من إلى نوع مخصص. |
{
"SubscriptionChannel":"__keyspace@0__:*",
"Channel":"__keyspace@0__:mykey",
"Message":"set"
}