Share via


Azure Functions용 RedisStreamTrigger(미리 보기)

스트림 RedisStreamTrigger 에서 새 항목을 읽고 해당 요소를 함수에 표시합니다.

계층 기본 표준, 프리미엄 Enterprise, Enterprise Flash
스트림

Important

Redis 트리거는 현재 소비 계획에서 실행되는 함수에 대해 지원되지 않습니다.

Important

Functions용 Node.js v4 모델은 Azure Cache for Redis 확장에서 아직 지원되지 않습니다. v4 모델의 작동 방식에 대한 자세한 내용은 Azure Functions Node.js 개발자 가이드를 참조하세요. v3과 v4의 차이점에 대해 자세히 알아보려면 마이그레이션 가이드를 참조하세요.

Important

Functions용 Python v2 모델은 Azure Cache for Redis 확장에서 아직 지원되지 않습니다. v2 모델의 작동 방식에 대한 자세한 내용은 Azure Functions Python 개발자 가이드를 참조하세요.

예시

Important

.NET 함수의 경우 In Process 모델보다 격리된 작업자 모델을 사용하는 것이 좋습니다. In-Process 모델과 격리된 작업자 모델을 비교하려면 격리된 작업자 모델과 Azure Functions의 .NET에 대한 In-process 모델 간의 차이점을 참조하세요.

실행 모델 설명
격리된 작업자 모델 함수 코드는 별도의 .NET 작업자 프로세스에서 실행됩니다. 지원되는 .NET 및 .NET Framework 버전과 함께 사용합니다. 자세한 내용은 .NET 격리 작업자 프로세스 함수 개발을 참조하세요.
In Process 모델 함수 코드는 Functions 호스트 프로세스와 동일한 프로세스에서 실행됩니다. .NET의 LTS(장기 지원) 버전만 지원합니다. 자세한 내용은 .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);
    }
}

이 샘플에서는 function.json 파일의 바인딩 데이터와 함께 동일한 index.js 파일을 사용합니다.

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"
}

이 샘플에서는 function.json 파일의 바인딩 데이터와 함께 동일한 run.ps1 파일을 사용합니다.

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 v1 프로그래밍 모델을 사용하려면 함수 폴더의 별도 function.json 파일에서 바인딩을 정의해야 합니다. 자세한 내용은 Python 개발자 가이드참조하세요.

이 샘플에서는 function.json 파일의 바인딩 데이터와 함께 동일한 __init__.py 파일을 사용합니다.

__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"
}

특성

매개 변수 설명 필수 항목 기본값
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 속성 설명 필수 항목 기본값
type
deleteAfterProcess 선택 사항 false
connection 다음과 같이 캐시 연결 문자열 포함하는 애플리케이션 설정이름입니다.<cacheName>.redis.cache.windows.net:6380,password...
key 읽을 키입니다.
pollingIntervalInMs Redis를 폴링하는 빈도(밀리초)입니다. 선택 사항 1000
messagesPerWorker (선택 사항) 각 함수 작업자가 처리해야 하는 메시지 수입니다. 함수의 크기를 조정해야 하는 작업자 수를 결정하는 데 사용됩니다. 선택 사항 100
count Redis에서 한 번에 읽을 항목 수입니다. 이러한 작업은 병렬로 처리됩니다. 선택 사항 10
name
direction

전체 예제는 예제 섹션을 참조하세요.

사용

Azure Function은 RedisStreamTrigger 스트림에서 새 항목을 읽고 해당 항목을 함수에 표시합니다.

트리거는 구성 가능한 고정 간격으로 Redis를 폴링하고, XREADGROUP을(를) 사용하여 스트림에서 요소를 읽습니다.

함수의 모든 인스턴스에 대한 소비자 그룹은 StreamTrigger 샘플의 함수 SimpleStreamTrigger이름입니다.

각 함수 인스턴스는 그룹 내에서 소비자 이름으로 사용할 임의의 GUID를 사용 WEBSITE_INSTANCE_ID 하거나 생성하여 확장된 함수 인스턴스가 스트림에서 동일한 메시지를 읽지 않도록 합니다.

Type 설명
byte[] 채널에서 보낸 메시지입니다.
string 채널에서 보낸 메시지입니다.
Custom 트리거는 Json.NET 직렬화를 사용하여 채널의 메시지를 string에서 사용자 지정 형식으로 매핑합니다.