Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Функции публикации и подписки Redis, позволяющие отправлять сообщения в Redis и передавать подписчикам.
Дополнительные сведения о триггерах и привязках Кэш Azure для Redis расширение Redis для Функции Azure.
Область доступности триггеров функций
| Тип триггера | Управляемый Redis в Azure | Кэш Azure для Redis |
|---|---|---|
| Триггер pub/sub | Да | Да |
Внимание
При использовании Управляемого Redis azure или уровнях enterprise Кэш Azure для Redis используйте порт 10000, а не порт 6380 или 6379.
Предупреждение
Этот триггер не поддерживается в плане потребления или плане плана потребления Flex , так как Redis PubSub требует от клиентов всегда активно прослушивать все сообщения. Для планов потребления функция может пропустить определенные сообщения, опубликованные в канале.
Внимание
Модель Node.js версии 4 для функций пока не поддерживается расширением Кэш Azure для Redis. Дополнительные сведения о том, как работает модель версии 4, см. в руководстве разработчика по Функции Azure Node.js. Дополнительные сведения о различиях между версиями 3 и 4 см. в руководстве по миграции.
Примеры
| Модель выполнения | Описание |
|---|---|
| Изолированная рабочая модель | Код функции выполняется в отдельном рабочем процессе .NET. Используйте поддерживаемые версии .NET и платформа .NET Framework. Дополнительные сведения см. в руководстве по запуску функций Azure C# в изолированной рабочей модели. |
| Модель внутрипроцессного процесса | Код функции выполняется в том же процессе, что и хост-процесс Функций. Поддерживает только долгосрочные версии .NET. Дополнительные сведения см. в статье Разработка функций библиотеки классов C# с помощью службы "Функции Azure". |
Внимание
Для функций .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 | Описание | Обязательное поле | По умолчанию. |
|---|---|---|---|
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не поддерживается в плане потребления или плане потребления Flex , так как Redis PubSub требует, чтобы клиенты всегда активно прослушивали все сообщения. Для планов потребления функция может пропустить определенные сообщения, опубликованные в канале. - Функции с
RedisPubSubTriggerне должны масштабироваться до нескольких экземпляров. Каждый экземпляр прослушивает и обрабатывает каждое вложенное сообщение паба, что приводит к дублированию обработки.
Предупреждение
Этот триггер не поддерживается в плане потребления или плане потребления Flex , так как Redis PubSub требует, чтобы клиенты всегда активно прослушивали все сообщения. Для планов потребления функция может пропустить определенные сообщения, опубликованные в канале.
Активация уведомлений пространства ключей
Redis предлагает встроенную концепцию, называемую уведомлениями по пространству ключей. Если эта функция включена, эта функция публикует уведомления о различных действиях кэша в выделенном канале pub/sub. Поддерживаемые действия включают действия, влияющие на определенные ключи, называемые уведомлениями пространства ключей, и определенные команды, называемые уведомлениями keyevent. Поддерживается огромный спектр действий Redis, таких как SET, DELи EXPIRE. Полный список можно найти в документации по уведомлениям о пространстве ключей.
keyspace Уведомления keyevent публикуются со следующим синтаксисом:
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"
}