RedisStreamTrigger для Функции Azure
Он RedisStreamTrigger
считывает новые записи из потока и отображает эти элементы в функцию.
Уровень | Базовая | Стандарт, Премиум | Enterprise, Enterprise Flash |
---|---|---|---|
Потоки | Да | Да | Да |
Внимание
Триггеры Redis в настоящее время не поддерживаются для функций, работающих в плане потребления.
Внимание
Модель Node.js версии 4 для функций пока не поддерживается расширением Кэш Azure для Redis. Дополнительные сведения о том, как работает модель версии 4, см. в руководстве разработчика по Функции Azure Node.js. Дополнительные сведения о различиях между версиями 3 и 4 см. в руководстве по миграции.
Пример
Внимание
Для функций .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 пользовательским типом. |