RedisPubSubTrigger для Функции Azure
Функции публикации и подписки Redis, позволяющие отправлять сообщения в Redis и передавать подписчикам.
Дополнительные сведения о триггерах и привязках Кэш Azure для Redis расширение Redis для Функции Azure.
Область доступности триггеров функций
Тип триггера | Управляемый Redis в Azure | Кэш Azure для Redis |
---|---|---|
Триггер pub/sub | Да | Да |
Внимание
При использовании Управляемого Redis azure или уровнях enterprise Кэш Azure для Redis используйте порт 10000, а не порт 6380 или 6379.
Предупреждение
Этот триггер не поддерживается в плане потребления, так как Redis PubSub требует от клиентов всегда активно прослушивать все сообщения. Для планов потребления функция может пропустить определенные сообщения, опубликованные в канале.
Внимание
Модель Node.js версии 4 для функций пока не поддерживается расширением Кэш Azure для Redis. Дополнительные сведения о том, как работает модель версии 4, см. в руководстве разработчика по Функции Azure Node.js. Дополнительные сведения о различиях между версиями 3 и 4 см. в руководстве по миграции.
Примеры
Модель выполнения | Description |
---|---|
Изолированная рабочая модель | Код функции выполняется в отдельном рабочем процессе .NET. Используйте поддерживаемые версии .NET и платформа .NET Framework. Дополнительные сведения см. в статье "Разработка изолированных рабочих процессов .NET". |
Модель внутрипроцессного процесса | Код функции выполняется в том же процессе, что и хост-процесс Функций. Поддерживает только долгосрочные версии .NET. Дополнительные сведения см. в статье "Разработка функций библиотеки классов .NET". |
Внимание
Для функций .NET рекомендуется использовать изолированную рабочую модель для модели в процессе . Сравнение внутрипроцессных и изолированных рабочих моделей см. в различиях между изолированной рабочей моделью и внутрипроцессной моделью для .NET на Функции Azure.
Этот пример прослушивает канал 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 версии 1 требует определения привязок в отдельном файле 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 |
Вложенный канал pub, к которому должен прослушивать триггер. Поддерживает шаблоны каналов в стиле glob. Это поле можно разрешить с помощью INameResolver . |
Да |
Заметки
Параметр | Описание: | Обязательное поле | По умолчанию. |
---|---|---|---|
name |
Имя переменной, владеющей значением, возвращаемым функцией. | Да | |
connection |
Имя параметра приложения, содержащего строка подключения кэша, например:<cacheName>.redis.cache.windows.net:6380,password... |
Да | |
channel |
Вложенный канал pub, к которому должен прослушивать триггер. Поддерживает шаблоны каналов в стиле glob. | Да |
Настройка
Свойство в function.json | Description | Обязательное поле | По умолчанию. |
---|---|---|---|
type |
Тип триггера. Для под триггера pub тип .redisPubSubTrigger |
Да | |
connection |
Имя параметра приложения, содержащего строка подключения кэша, например:<cacheName>.redis.cache.windows.net:6380,password... |
Да | |
channel |
Имя подканателя паба, на который подписана подписка. | Да | |
pattern |
Логическое значение для указания заданного канала использует сопоставление шаблонов. Если pattern имеет значение true, канал обрабатывается как шаблон глобового стиля , а не как литерал. |
Да | |
name |
Имя переменной, владеющей значением, возвращаемым функцией. | Да | |
direction |
Должен иметь значениеin . |
Да |
Внимание
Параметр connection
не содержит строка подключения кэш Redis. Вместо этого он указывает на имя переменной среды, содержащей строка подключения. Это делает приложение более безопасным. Дополнительные сведения см. в строка подключения Redis.
Использование
Функции публикации и подписки Redis, позволяющие отправлять сообщения в Redis и передавать подписчикам. Позволяет RedisPubSubTrigger
активировать Функции Azure в действии pub/sub. Подписывается RedisPubSubTrigger
на определенный шаблон канала с помощью PSUBSCRIBE
и отображает сообщения, полученные на этих каналах функции.
Предварительные требования и ограничения
- Он
RedisPubSubTrigger
не может прослушивать уведомления пространства ключей в кластеризованных кэшах. - Базовые функции уровня не поддерживают активацию
keyspace
илиkeyevent
уведомления с помощьюRedisPubSubTrigger
функции . - План
RedisPubSubTrigger
потребления не поддерживается, так как Redis PubSub требует, чтобы клиенты всегда активно прослушивали все сообщения. Для планов потребления функция может пропустить определенные сообщения, опубликованные в канале. - Функции с
RedisPubSubTrigger
не должны масштабироваться до нескольких экземпляров. Каждый экземпляр прослушивает и обрабатывает каждое вложенное сообщение паба, что приводит к дублированию обработки.
Предупреждение
Этот триггер не поддерживается в плане потребления, так как Redis PubSub требует от клиентов всегда активно прослушивать все сообщения. Для планов потребления функция может пропустить определенные сообщения, опубликованные в канале.
Активация уведомлений пространства ключей
Redis предлагает встроенную концепцию, называемую уведомлениями по пространству ключей. Если эта функция включена, эта функция публикует уведомления о различных действиях кэша в выделенном канале pub/sub. Поддерживаемые действия включают действия, влияющие на определенные ключи, называемые уведомлениями пространства ключей, и определенные команды, называемые уведомлениями keyevent. Поддерживается огромный спектр действий Redis, таких как SET
, DEL
и EXPIRE
. Полный список можно найти в документации по уведомлениям о пространстве ключей.
keyevent
Уведомления keyspace
публикуются со следующим синтаксисом:
PUBLISH __keyspace@0__:<affectedKey> <command>
PUBLISH __keyevent@0__:<affectedCommand> <key>
Так как эти события публикуются в каналах pub/sub, RedisPubSubTrigger
они могут их забрать. Дополнительные примеры см. в разделе RedisPubSubTrigger .
Внимание
В Кэш Azure для 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"
}