HTTP를 통한 풀 배달

이 문서는 HTTP를 통한 Event Grid의 풀 배달 사용을 시작하기 전에 필수 정보를 제공하는 Azure Event Grid란? 및 Event Grid 개념 문서를 기반으로 작성되었습니다. 지원되는 기본 개념, 리소스 모델 및 메시지 배달 모드를 다룹니다. 이 문서의 끝부분에는 Event Grid를 사용하는 방법을 안내하는 문서와 심층적인 개념 정보를 제공하는 문서에 대한 유용한 링크가 있습니다.

참고 항목

이 문서는 HTTP 프로토콜을 사용하는 Event Grid 기능을 시작하는 데 도움이 됩니다. 이 문서는 클라우드에서 애플리케이션을 통합해야 하는 사용자에게 적합합니다. IoT 디바이스 데이터를 통신해야 하는 경우 Azure Event Grid의 MQTT Broker 기능 개요를 참조하세요.

CloudEvents

Event Grid 네임스페이스 토픽은 JSON 형식HTTP 프로토콜 바인딩을 사용하여 CNCF(Cloud Native Computing Foundation)의 개방형 표준 CloudEvents 1.0 사양을 준수하는 이벤트를 허용합니다.

자세한 내용은 CloudEvents 개념을 참조하세요.

CloudEvents 콘텐츠 모드

CloudEvents 사양은 사용할 수 있는 이진, 구조화, 일괄 처리의 세 가지 콘텐츠 모드를 정의합니다.

Important

콘텐츠 모드를 사용하면 텍스트(JSON, text/*등) 또는 이진 인코딩된 이벤트 데이터를 교환할 수 있습니다. 이진 콘텐츠 모드는 이진 데이터를 보내는 데만 사용되지 않습니다.

콘텐츠 모드는 사용하는 인코딩, 이진 또는 텍스트가 아니라 이벤트 데이터와 해당 메타데이터를 설명하고 교환하는 방법에 관한 것입니다. 구조화된 콘텐츠 모드는 컨텍스트 특성과 이벤트 데이터가 HTTP 페이로드에 함께 있는 단일 구조(예: JSON 개체)를 사용합니다. 이진 콘텐츠 모드는 HTTP 헤더에 매핑되는 컨텍스트 특성과 Content-Type의 미디어 형식 값에 따라 인코딩된 HTTP 페이로드인 이벤트 데이터를 구분합니다.

자세한 내용은 CloudEvents 개념 모드를 참조하세요.

메시지 및 이벤트

CloudEvent는 일반적으로 시스템에서 발생하는 이벤트, 즉 시스템 상태 변경을 알리는 이벤트 데이터를 전달합니다. 그러나 CloudEvents를 사용하는 경우 모든 종류의 데이터를 전달할 수 있습니다. 예를 들어 CloudEvents 교환 형식을 사용하여 다운스트림 애플리케이션에 작업을 요청하는 명령 메시지를 보낼 수 있습니다. 또 다른 예는 Event Grid의 MQTT broker에서 토픽으로 메시지를 라우팅하는 경우입니다. 이 시나리오에서는 CloudEvents 봉투에 래핑된 MQTT 메시지를 라우팅합니다.

풀 배달

풀 배달을 사용하면 애플리케이션이 Event Grid에 연결되어 큐와 같은 의미 체계를 사용하여 CloudEvents를 읽습니다.

풀 배달은 다음과 같은 이벤트 사용 이점을 제공합니다.

  • 애플리케이션에서 지원하는 수신 속도 또는 규모에 따라 사용자 고유의 속도로 이벤트를 사용합니다.

  • 선택한 시간에 이벤트를 사용합니다. 예를 들어 비즈니스 요구 사항에 따라 메시지는 야간에 처리됩니다.

  • 데이터가 개인 IP 공간을 사용하도록 프라이빗 링크를 통해 이벤트를 사용합니다.

참고 항목

  • 네임스페이스는 단일 종류의 토픽을 특징으로 하는 더 간단한 리소스 모델을 제공합니다. 현재 Event Grid는 네임스페이스 토픽을 통해 자체 애플리케이션 이벤트 게시를 지원합니다. 네임스페이스 토픽을 사용하여 Azure 서비스 또는 파트너 SaaS 시스템의 이벤트를 사용할 수 없습니다. 또한 네임스페이스에서는 시스템 토픽, 도메인 토픽 또는 파트너 토픽을 만들 수 없습니다.
  • 네임스페이스 토픽은 CloudEvents JSON 형식을 지원합니다.

큐 이벤트 구독

이벤트를 받거나 이벤트 상태를 관리하는 작업을 사용하는 경우 애플리케이션은 네임스페이스 HTTP 엔드포인트, 토픽 이름 및 이벤트 구독의 이름을 지정합니다. 큐 이벤트 구독의 deliveryMode는 "queue"로 설정됩니다. 큐 이벤트 구독은 풀 배달 API를 통해 이벤트를 소비하는 데 사용됩니다. 이러한 리소스를 만드는 방법에 대한 자세한 내용은 네임스페이스, 토픽이벤트 구독 만들기를 참조하세요.

이벤트 구독을 사용하여 이벤트에 대한 필터링 조건을 정의하면 해당 이벤트 구독을 통해 사용할 수 있는 이벤트 세트를 효과적으로 정의할 수 있습니다. 하나 이상의 구독자(소비자) 애플리케이션이 동일한 네임스페이스 엔드포인트에 연결되고 동일한 토픽 및 이벤트 구독을 사용할 수 있습니다.

이벤트 구독을 사용하는 게시자 및 소비자의 개략적인 다이어그램입니다. 소비자는 끌어오기 배달을 사용합니다.

풀 배달 작업

애플리케이션은 풀 배달 작업을 수행할 때 다음 작업을 사용합니다.

  • 수신 작업은 Event Grid에 대한 단일 요청을 사용하여 하나 이상의 이벤트를 읽는 데 사용됩니다. 기본적으로 broker는 이벤트를 사용할 수 있을 때까지 최대 60초 동안 기다립니다. 예를 들어 이벤트가 처음 게시될 때 배달이 가능해집니다. 수신 요청이 성공하면 0개 이상의 이벤트가 반환됩니다. 이벤트를 사용할 수 있는 경우 요청된 이벤트 수까지 최대한 많은 이벤트를 반환합니다. 또한 Event Grid는 모든 이벤트 읽기에 대한 잠금 토큰을 반환합니다.
  • 잠금 토큰은 상태를 제어하는 데 사용할 수 있는 이벤트를 식별하는 일종의 핸들입니다.
  • 소비자 애플리케이션이 이벤트를 수신하고 처리하면 해당 이벤트를 승인합니다. 이 작업은 이벤트가 다른 클라이언트로 다시 배달되지 않게 이벤트를 삭제하도록 Event Grid에 지시합니다. 소비자 애플리케이션은 만료되기 전에 잠금 토큰을 지정하여 단일 요청으로 하나 이상의 토큰을 승인합니다.

다른 경우에는 소비자 애플리케이션이 이벤트를 해제하거나 거부할 수도 있습니다.

  • 소비자 애플리케이션은 수신된 이벤트를 릴리스하여 Event Grid가 해당 이벤트를 처리할 준비가 되지 않음을 알리고 다시 배달할 수 있도록 합니다. 이렇게 하려면 Event Grid로 다시 반환될 이벤트를 식별하는 잠금 토큰을 사용하여 릴리스 작업을 호출합니다. 애플리케이션은 이벤트를 즉시 릴리스해야 하는지 또는 이벤트를 다시 배달하기 전에 지연을 사용해야 하는지 여부를 제어할 수 있습니다.

  • 소비자 애플리케이션이 이벤트를 처리할 수 없는 영구적 조건이 있는 경우 이벤트를 거부하도록 선택할 수 있습니다. 예를 들어 잘못된 형식의 메시지는 성공적으로 구문 분석할 수 없으므로 거부될 수 있습니다. 배달 못한 편지 대상을 사용할 수 있는 경우 거부된 이벤트는 배달 못 한 편지로 표시됩니다. 그렇지 않으면 삭제됩니다.

풀 배달 작업이 실행되는 범위

수신, 승인, 릴리스스, 거부 또는 갱신 잠금 작업을 호출하는 경우 해당 작업은 이벤트 구독의 컨텍스트에서 수행됩니다. 예를 들어 이벤트를 승인하는 경우 승인 작업을 호출할 때 사용되는 이벤트 구독을 통해 해당 이벤트를 더 이상 사용할 수 없습니다. 다른 이벤트 구독은 여전히 "동일한" 이벤트를 사용할 수 있습니다. 이는 이벤트 구독이 게시된 이벤트의 복사본을 가져오기 때문입니다. 이러한 이벤트 복사본은 이벤트 구독 간에 서로 효과적으로 구별됩니다. 각 이벤트에는 다른 이벤트와 독립적인 자체 상태가 있습니다.

끌어오기 배달을 사용하여 이벤트를 수신할 때의 데이터 모양

끌어오기 배달을 사용하여 이벤트를 배달할 때 Event Grid에는 이벤트brokerProperties 개체가 차례로 포함된 개체 배열이 포함됩니다. 이벤트 속성의 값은 구조화된 콘텐츠 모드로 전달되는 CloudEvent입니다. brokerProperties 개체는 배달된 CloudEvent에 연결된 잠금 토큰을 포함합니다. 다음 json 개체는 두 개의 이벤트를 반환하는 수신 작업의 샘플 응답입니다.

{
    "value": [
        {
            "brokerProperties": {
                "lockToken": "CiYKJDUwNjE4QTFFLUNDODQtNDZBQy1BN0Y4LUE5QkE3NjEwNzQxMxISChDXYS23Z+5Hq754VqQjxywE",
                "deliveryCount": 2
            },
            "event": {
                "specversion": "1.0",
                "id": "A234-1234-1235",
                "source": "/mycontext",
                "time": "2018-04-05T17:31:00Z",
                "type": "com.example.someeventtype",
                "data": "some data"
            }
        },
        {
            "brokerProperties": {
                "lockToken": "CiYKJDUwNjE4QTFFLUNDODQtNDZBQy1BN0Y4LUE5QkE3NjEwNzQxMxISChDLeaL+nRJLNq3/5NXd/T0b",
                "deliveryCount": 1
            },
            "event": {
                "specversion": "1.0",
                "id": "B688-1234-1235",
                "source": "/mycontext",
                "type": "com.example.someeventtype",
                "time": "2018-04-05T17:31:00Z",
                "data": {
                    "somekey" : "value",
                    "someOtherKey" : 9
                }
            }
        }
    ]
}

푸시 및 풀 배달

Event Grid는 HTTP를 사용하여 푸시 및 풀 이벤트 배달을 지원합니다. 푸시 배달을 사용하면 Event Grid에서 이벤트를 보내는 이벤트 구독, 웹후크 또는 Azure 서비스에서 대상을 정의할 수 있습니다. 풀 배달을 사용하면 구독자 애플리케이션은 Event Grid에 연결하여 이벤트를 사용할 수 있습니다. 풀 배달은 Event Grid 네임스페이스의 토픽을 지원합니다.

Important

Event Hubs는 네임스페이스 토픽에 대한 구독의 대상으로 지원됩니다. 향후 릴리스에서 Event Grid 네임스페이스는 추가 대상과 함께 Event Grid 기본에서 현재 사용할 수 있는 모든 대상을 지원합니다.

관련된 리소스 종류와 함께 푸시 배달 및 풀 배달을 보여 주는 개략적인 다이어그램.

푸시 배달과 풀 배달을 사용해야 하는 경우

다음은 풀 또는 푸시 배달을 사용할 시기를 결정하는 데 도움이 되는 일반적인 지침입니다.

풀 배달

  • 이벤트를 수신할 시기를 완전히 제어할 수 있어야 합니다. 예를 들어, 애플리케이션은 항상 실행되지 않거나 충분히 안정적이지 않을 수 있고, 특정 시간에 데이터를 처리하는 경우가 있을 수 있습니다.
  • 이벤트 사용을 완전히 제어할 수 있어야 합니다. 예를 들어, 소비자 애플리케이션의 다운스트림 서비스나 레이어에는 이벤트를 처리하지 못하게 하는 문제가 있습니다. 이 경우 풀 배달 API를 사용하면 소비자 앱이 이미 읽은 이벤트를 브로커에 다시 릴리스하여 나중에 배달할 수 있습니다.
  • 이벤트를 수신할 때 프라이빗 링크를 사용하려고 합니다. 이 링크는 푸시 배달이 아니라 풀 배달에서만 가능합니다.
  • 엔드포인트를 노출하고 푸시 배달을 사용할 수 있는 기능은 없지만 Event Grid에 연결하여 이벤트를 사용할 수 있습니다.

푸시 배달

  • 시스템 상태 변경이 발생했는지 확인하기 위해 지속적인 폴링을 방지하려고 합니다. 대신 Event Grid를 사용하여 상태 변경이 발생할 때 이벤트를 보냅니다.
  • 아웃바운드 호출을 수행할 수 없는 애플리케이션이 있습니다. 예를 들어, 조직에서 데이터 반출을 염려할 수 있습니다. 그러나 애플리케이션은 퍼블릭 엔드포인트를 통해 이벤트를 수신할 수 있습니다.

다음 단계

다음 문서에서는 Event Grid를 사용하는 방법에 대한 정보를 제공하거나 개념에 대한 추가 정보를 제공합니다.