Поделиться через


RedisStreamTrigger для Функции Azure

Он RedisStreamTrigger считывает новые записи из потока и отображает эти элементы в функцию.

Уровень Базовая Стандарт, Премиум Enterprise, Enterprise Flash
Потоки Да Да Да

Внимание

Триггеры Redis в настоящее время не поддерживаются для функций, работающих в плане потребления.

Внимание

Модель Node.js версии 4 для функций пока не поддерживается расширением Кэш Azure для Redis. Дополнительные сведения о том, как работает модель версии 4, см. в руководстве разработчика по Функции Azure Node.js. Дополнительные сведения о различиях между версиями 3 и 4 см. в руководстве по миграции.

Внимание

Модель Python версии 2 для функций пока не поддерживается расширением Кэш Azure для Redis. Дополнительные сведения о том, как работает модель версии 2, см. в руководстве разработчика Функции Azure Python.

Пример

Внимание

Для функций .NET рекомендуется использовать изолированную рабочую модель для модели в процессе . Сравнение внутрипроцессных и изолированных рабочих моделей см. в различиях между изолированной рабочей моделью и внутрипроцессной моделью для .NET на Функции Azure.

Модель выполнения Description
Изолированная рабочая модель Код функции выполняется в отдельном рабочем процессе .NET. Используйте поддерживаемые версии .NET и платформа .NET Framework. Дополнительные сведения см. в статье "Разработка изолированных рабочих процессов .NET".
Модель внутрипроцессного процесса Код функции выполняется в том же процессе, что и хост-процесс Функций. Поддерживает только долгосрочные версии .NET. Дополнительные сведения см. в статье "Разработка функций библиотеки классов .NET".
using Microsoft.Extensions.Logging;

namespace Microsoft.Azure.Functions.Worker.Extensions.Redis.Samples.RedisStreamTrigger
{
    internal class SimpleStreamTrigger
    {
        private readonly ILogger<SimpleStreamTrigger> logger;

        public SimpleStreamTrigger(ILogger<SimpleStreamTrigger> logger)
        {
            this.logger = logger;
        }

        [Function(nameof(SimpleStreamTrigger))]
        public void Run(
            [RedisStreamTrigger(Common.connectionStringSetting, "streamKey")] string entry)
        {
            logger.LogInformation(entry);
        }
    }
}

package com.function.RedisStreamTrigger;

import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.redis.annotation.*;

public class SimpleStreamTrigger {
    @FunctionName("SimpleStreamTrigger")
    public void run(
            @RedisStreamTrigger(
                name = "req",
                connection = "redisConnectionString",
                key = "streamTest",
                pollingIntervalInMs = 1000,
                maxBatchSize = 1)
                String message,
            final ExecutionContext context) {
            context.getLogger().info(message);
    }
}

В этом примере используется тот же index.js файл с данными привязки function.json в файле.

index.js Вот файл:

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

Ниже function.jsonприведены данные привязки:

{
  "bindings": [
    {
      "type": "redisStreamTrigger",
      "connection": "redisConnectionString",
      "key": "streamTest",
      "pollingIntervalInMs": 1000,
      "maxBatchSize": 16,
      "name": "entry",
      "direction": "in"
    }
  ],
  "scriptFile": "index.js"
}

В этом примере используется тот же run.ps1 файл с данными привязки function.json в файле.

run.ps1 Вот файл:

param($entry, $TriggerMetadata)
Write-Host ($entry | ConvertTo-Json)

Ниже function.jsonприведены данные привязки:

{
  "bindings": [
    {
      "type": "redisStreamTrigger",
      "connection": "redisConnectionString",
      "key": "streamTest",
      "pollingIntervalInMs": 1000,
      "maxBatchSize": 16,
      "name": "entry",
      "direction": "in"
    }
  ],
  "scriptFile": "run.ps1"
}

Модель программирования Python версии 1 требует определения привязок в отдельном файле function.json в папке функции. Дополнительные сведения см. в руководстве разработчика Python.

В этом примере используется тот же __init__.py файл с данными привязки function.json в файле.

__init__.py Вот файл:

import logging

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

Ниже function.jsonприведены данные привязки:

{
  "bindings": [
    {
      "type": "redisStreamTrigger",
      "connection": "redisConnectionString",
      "key": "streamTest",
      "pollingIntervalInMs": 1000,
      "maxBatchSize": 16,
      "name": "entry",
      "direction": "in"
    }
  ],
  "scriptFile": "__init__.py"
}

Атрибуты

Параметры Description Обязательное поле По умолчанию.
Connection Имя параметра приложения, содержащего строка подключения кэша, например:<cacheName>.redis.cache.windows.net:6380,password... Да
Key Ключ для чтения из. Да
PollingIntervalInMs Как часто опрашивать сервер Redis в миллисекундах. Необязательно 1000
MessagesPerWorker Количество сообщений, которые должны обрабатываться каждой рабочей ролью функций. Используется для определения количества рабочих ролей, на которые должна масштабироваться функция. Необязательно 100
Count Количество элементов для извлечения из Redis одновременно. Необязательно 10
DeleteAfterProcess Указывает, удаляет ли функция записи потока после обработки. Необязательно false

Заметки

Параметр Описание: Обязательное поле По умолчанию.
name entry Да
connection Имя параметра приложения, содержащего строка подключения кэша, например:<cacheName>.redis.cache.windows.net:6380,password... Да
key Ключ для чтения из. Да
pollingIntervalInMs Как часто опрашивать Redis в миллисекундах. Необязательно 1000
messagesPerWorker Количество сообщений, которые должны обрабатываться каждой рабочей ролью функций. Он используется для определения количества рабочих ролей, на которые должна масштабироваться функция. Необязательно 100
count Количество записей для чтения из Redis одновременно. Записи обрабатываются параллельно. Необязательно 10
deleteAfterProcess Удаление записей потока после выполнения функции. Необязательно false

Настройка

В следующей таблице описываются свойства конфигурации привязки, которые задаются в файле function.json.

Свойства function.json Description Обязательное поле По умолчанию.
type Да
deleteAfterProcess Необязательно false
connection Имя параметра приложения, содержащего строка подключения кэша, например:<cacheName>.redis.cache.windows.net:6380,password... Да
key Ключ для чтения. Да
pollingIntervalInMs Как часто опрашивать Redis в миллисекундах. Необязательно 1000
messagesPerWorker (необязательно) Количество сообщений, которые должны обрабатываться каждой рабочей ролью функций. Используется для определения количества рабочих ролей, которые должны масштабироваться. Необязательно 100
count Количество записей для чтения из Redis одновременно. Они обрабатываются параллельно. Необязательно 10
name Да
direction Да

Подробные примеры см. в разделе Примеры.

Использование

Функция RedisStreamTrigger Azure считывает новые записи из потока и отображает эти записи в функцию.

Триггер опрашивает Redis в настраиваемом фиксированном интервале и использует для XREADGROUP чтения элементов из потока.

Группа потребителей для всех экземпляров функции — это имя функции, то есть SimpleStreamTrigger для примера StreamTrigger.

Каждый экземпляр функций использует WEBSITE_INSTANCE_ID или создает случайный GUID для использования в качестве имени потребителя в группе, чтобы гарантировать, что развернутые экземпляры функции не считывают одни и те же сообщения из потока.

Тип Описание
byte[] Сообщение из канала.
string Сообщение из канала.
Custom Триггер использует сериализацию Json.NET для сопоставления сообщения из канала с string пользовательским типом.