다음을 통해 공유


빠른 시작: Azure Event Grid 네임스페이스 토픽(.NET)에서 메시지 보내기 및 받기

이 빠른 시작에서는 다음 단계를 수행합니다.

  1. Azure Portal을 사용하여 Event Grid 네임스페이스를 만듭니다.
  2. Azure Portal을 사용하여 Event Grid 네임스페이스 토픽을 만듭니다.
  3. Azure Portal을 사용하여 이벤트 구독을 만듭니다.
  4. 일련의 메시지를 토픽에 보내는 .NET 콘솔 애플리케이션을 작성합니다.
  5. 토픽에서 해당 메시지를 수신하는 .NET 콘솔 애플리케이션을 작성합니다.

참고 항목

이 빠른 시작에서는 메시지 일괄 처리를 Event Grid 네임스페이스 토픽으로 보낸 다음 이를 수신하는 간단한 시나리오를 구현하기 위한 단계별 지침을 제공합니다. .NET 클라이언트 라이브러리에 대한 개요는 .NET용 Azure Event Grid 클라이언트 라이브러리를 참조하세요. 더 많은 샘플을 보려면 GitHub의 Event Grid .NET 샘플을 참조하세요.

필수 조건

서비스를 처음 사용하는 경우 이 빠른 시작을 수행하기 전에 Event Grid 개요를 참조하세요.

  • Azure 구독. Azure Event Grid를 포함한 Azure 서비스를 사용하려면 구독이 필요합니다. 기존 Azure 계정이 없으면 평가판에 등록할 수 있습니다.
  • Visual Studio 2022. 샘플 애플리케이션은 C# 10에 도입된 새 기능을 활용합니다. 최신 구문을 사용하려면 .NET 6.0 이상을 설치하고 언어 버전을 latest로 설정하는 것이 좋습니다. Visual Studio를 사용하는 경우 Visual Studio 2022 이전 버전은 C# 10 프로젝트를 빌드하는 데 필요한 도구와 호환되지 않습니다.

Azure Portal에서 네임스페이스 만들기

Azure Event Grid의 네임스페이스는 하나 이상의 항목, 클라이언트, 클라이언트 그룹, 항목 공간 및 권한 바인딩에 대한 논리적 컨테이너입니다. 동일한 Azure 지역에 여러 리소스를 가질 수 있는 고유한 네임스페이스를 제공합니다. Azure Event Grid 네임스페이스를 사용하면 이제 관련 리소스를 그룹화하고 Azure 구독에서 단일 단위로 관리할 수 있습니다.

Azure Event Grid 네임스페이스를 만들고, 보고, 관리하려면 다음 섹션을 따릅니다.

네임스페이스를 만들려면

  1. Azure 포털에 로그인합니다.

  2. 검색 상자Event Grid 네임스페이스를 입력하고 결과에서 Event Grid 네임스페이스를 선택합니다.

    검색 결과의 Event Grid 네임스페이스를 보여 주는 스크린샷.

  3. Event Grid 네임스페이스 페이지의 도구 모음에서 + 만들기를 선택합니다.

    도구 모음에서 만들기 단추가 선택된 Event Grid 네임스페이스 페이지를 보여 주는 스크린샷.

  4. 기본 페이지에서 다음 단계를 수행합니다.

    1. 네임스페이스를 만들려는 Azure 구독을 선택합니다.

    2. 기존 리소스 그룹을 선택하거나 리소스 그룹을 만듭니다.

    3. 네임스페이스의 이름을 입력합니다.

    4. 네임스페이스를 만들려는 지역 또는 위치를 선택합니다.

    5. 페이지 아래쪽에서 검토 + 만들기를 선택합니다.

      네임스페이스 만들기 페이지의 기본 탭을 보여 주는 스크린샷.

  5. 검토 + 만들기 탭에서 설정을 검토하고 만들기를 선택합니다.

  6. 성공한 배포 페이지에서 리소스로 이동을 선택하여 네임스페이스로 이동합니다.

네임스페이스 토픽 만들기

  1. Event Grid 네임스페이스 페이지에 있지 않은 경우 네임스페이스 만들기, 보기 및 관리 단계에 따라 토픽을 만드는 데 사용할 네임스페이스를 확인합니다.

  2. Event Grid 네임스페이 페이지의 왼쪽 메뉴에 있는 이벤트 브로커 섹션에서 토픽 옵션을 선택합니다.

  3. 토픽 페이지의 명령 모음에서 + 토픽 단추를 선택합니다.

    Event Grid 네임스페이스 토픽 만들기를 보여 주는 스크린샷.

  4. 토픽 만들기 페이지에서 만들려는 토픽의 이름을 입력하고 만들기를 선택합니다.

    Event Grid 네임스페이스 토픽 만들기 기본 사항을 보여 주는 스크린샷.

이벤트 구독 만들기

  1. Azure Portal Event Grid 네임스페이스의 토픽 페이지에 있는 경우 토픽 목록에서 토픽을 선택합니다. 토픽 페이지에 있는 경우 네임스페이스 토픽 만들기, 보기 및 관리의 지침에 따라 이벤트 구독을 만드는 데 사용할 토픽을 식별합니다.

    토픽이 선택된 Event Grid 토픽 페이지를 보여 주는 스크린샷.

  2. Event Gird 네임스페이스 토픽 페이지의 왼쪽 메뉴에 있는 엔터티 섹션에서 구독 옵션을 선택합니다.

  3. 구독 페이지의 명령 모음에서 "+ 구독" 단추를 선택합니다.

    Event Grid 이벤트 구독의 만들기를 보여 주는 스크린샷.

  4. 기본 탭에서 다음 단계를 수행합니다.

    1. 만들려는 구독 이름 입력

    2. 배달 스키마Cloud Events v1.0이 설정되어 있는지 확인합니다.

    3. 배달 모드(끌어오기 모드)로 설정되어 있는지 확인합니다.

    4. 페이지 하단에서 다음: 필터를 선택합니다.

      Event Grid 이벤트 구독의 기본 사항 만들기를 보여 주는 스크린샷.

  5. 필터 탭에서 구독에서 필터링할 이벤트 유형의 이름을 추가하고 구독에서 사용할 컨텍스트 특성 필터를 추가합니다. 그런 다음, 페이지 하단에서 다음: 추가 기능을 선택합니다.

    Event Grid 이벤트 구독의 필터 만들기를 보여 주는 스크린샷.

  6. 추가 기능 탭에서는 이벤트 보존, 최대 전송 횟수, 잠금 기간 및 데드레터링 설정을 지정할 수 있습니다.

    Event Grid 이벤트 구독의 추가 기능 만들기를 보여 주는 스크린샷.

  7. 만들기를 선택하여 이벤트 구독을 만듭니다.

Azure에 앱 인증

이 빠른 시작에서는 Azure Event Grid에 연결하는 방법(연결 문자열)을 보여 줍니다. 이 섹션에서는 연결 문자열을 사용하여 Event Grid 네임스페이스에 연결하는 방법을 보여줍니다. Azure를 처음 사용하는 경우 연결 문자열 옵션을 더 쉽게 따라할 수 있습니다. 새 Event Grid 네임스페이스를 만들면 각각 네임스페이스 또는 토픽의 모든 측면에 대한 모든 권한을 부여하는 초기 기본 및 보조 키가 자동으로 만들어집니다. 클라이언트는 연결 문자열을 사용하여 Event Grid 네임스페이스에 연결할 수 있습니다. 네임스페이스 토픽에 대한 액세스 키를 복사하려면 다음 단계를 따릅니다.

  1. Event Grid 네임스페이스 페이지에서 토픽을 선택합니다.

  2. 액세스해야 하는 토픽을 선택합니다.

  3. 액세스 키 페이지에서 키 1 또는 키 2 옆에 있는 복사 단추를 선택하여 나중에 사용할 수 있도록 액세스 키를 클립보드에 복사합니다. 메모장이나 기타 다른 위치에 임시로 이 값을 붙여 넣습니다.

    Event Grid 토픽의 액세스 키를 보여 주는 스크린샷.

Visual Studio 시작

Visual Studio를 시작합니다. 시작 창이 표시되면 오른쪽 창에서 코드를 사용하지 않고 계속 링크를 선택합니다.

토픽에 메시지 보내기

이 섹션에서는 Event Grid 토픽에 메시지를 보내는 .NET 콘솔 애플리케이션을 만드는 방법을 보여 줍니다.

콘솔 애플리케이션 만들기

  1. Visual Studio에서 파일 ->새로 만들기 ->프로젝트 메뉴를 선택합니다.

  2. 새 프로젝트 만들기 대화 상자에서 다음 단계를 수행합니다. 이 대화 상자가 표시되지 않으면 메뉴에서 파일을 선택하고 새로 만들기를 선택한 다음, 프로젝트를 선택합니다.

    1. 프로그래밍 언어로 C#을 선택합니다.

    2. 애플리케이션 유형으로 콘솔을 선택합니다.

    3. 결과 목록에서 콘솔 앱을 선택합니다.

    4. 그런 후에 다음을 선택합니다.

      C# 및 콘솔이 선택된 새 프로젝트 만들기 대화 상자를 보여 주는 스크린샷.

  3. 프로젝트 이름으로 EventSender를 입력하고 솔루션 이름으로 EventGridQuickStart를 입력한 후 다음을 선택합니다.

    새 프로젝트 구성 대화 상자의 솔루션 및 프로젝트 이름을 보여 주는 스크린샷.

  4. 추가 정보 페이지에서 만들기를 선택하여 솔루션 및 프로젝트를 만듭니다.

프로젝트에 NuGet 패키지 추가

  1. 메뉴에서 도구>NuGet 패키지 관리자>패키지 관리자 콘솔을 선택합니다.

  2. 다음 명령을 실행하여 Azure.Messaging.EventGrid NuGet 패키지를 설치합니다.

    Install-Package Azure.Messaging.EventGrid.Namespaces
    

네임스페이스 토픽에 이벤트를 보내는 코드 추가

  1. Program.cs의 내용을 다음 코드로 바꿉니다. 코드 주석에 추가 정보와 함께 중요한 단계가 설명되어 있습니다.

    Important

    코드 조각에서 자리 표시자 값(<NAMESPACE-ENDPOINT> , <TOPIC-NAME>, <TOPIC-ACCESS-KEY>, <TOPIC-SUBSCRIPTION-NAME>)을 네임스페이스 엔드포인트, 토픽 이름 및 토픽 키로 업데이트합니다.

    using Azure.Messaging;
    using Azure;
    using Azure.Messaging.EventGrid.Namespaces;
    
    
    // TODO: Replace the following placeholders with appropriate values
    
    // Endpoint of the namespace that you can find on the Overview page for your Event Grid namespace. Prefix it with https://.
    // Should be in the form: https://namespace01.eastus-1.eventgrid.azure.net. 
    var namespaceEndpoint = "<NAMESPACE-ENDPOINT>";
    
    // Name of the topic in the namespace
    var topicName = "<TOPIC-NAME>";
    
    // Access key for the topic
    var topicKey = "<TOPIC-ACCESS-KEY>";
    
    // Construct the client using an Endpoint for a namespace as well as the access key
    var client = new EventGridSenderClient(new Uri(namespaceEndpoint), topicName, new AzureKeyCredential(topicKey));
    
    // Publish a single CloudEvent using a custom TestModel for the event data.
    var @ev = new CloudEvent("employee_source", "type", new TestModel { Name = "Bob", Age = 18 });
    await client.SendAsync(ev);
    
    // Publish a batch of CloudEvents.
    
    await client.SendAsync(
    new[] {
        new CloudEvent("employee_source", "type", new TestModel { Name = "Tom", Age = 55 }),
        new CloudEvent("employee_source", "type", new TestModel { Name = "Alice", Age = 25 })});
    
    Console.WriteLine("Three events have been published to the topic. Press any key to end the application.");
    Console.ReadKey();
    
    public class TestModel
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
    
    
  2. 프로그램을 빌드하고 오류가 없는지 확인합니다.

  3. 프로그램을 실행하고 확인 메시지가 나타날 때까지 기다립니다.

    Three events have been published to the topic. Press any key to end the application.
    

    Important

    대부분의 경우 역할 할당이 Azure에서 전파되는 데 1~2분이 걸립니다. 드문 경우지만 최대 8분이 소요될 수 있습니다. 코드를 처음 실행할 때 인증 오류가 발생하면 잠시 기다렸다가 다시 시도하세요.

  4. Azure Portal에서 다음 단계를 수행합니다.

    1. Event Grid 네임스페이스로 이동합니다.

    2. 개요 페이지에서는 차트의 네임스페이스에 게시된 이벤트 수를 볼 수 있습니다.

      Azure Portal의 Event Grid 네임스페이스 페이지를 보여 주는 스크린샷.

토픽에서 메시지 끌어오기

이 섹션에서는 토픽으로부터 메시지를 수신하는 .NET 콘솔 애플리케이션을 만듭니다.

게시된 CloudEvents를 수신할 프로젝트 만들기

  1. 솔루션 탐색기 창에서 EventGridQuickStart 솔루션을 마우스 오른쪽 단추로 클릭하고, 추가를 가리키고, 새 프로젝트를 선택합니다.
  2. 콘솔 애플리케이션을 선택하고 다음을 선택합니다.
  3. 프로젝트 이름EventReceiver를 입력하고 만들기를 선택합니다.
  4. 솔루션 탐색기 창에서 EventReceiver를 마우스 오른쪽 단추로 클릭하고 시작 프로젝트로 설정을 선택합니다.

프로젝트에 NuGet 패키지 추가

  1. 메뉴에서 도구>NuGet 패키지 관리자>패키지 관리자 콘솔을 선택합니다.

  2. 다음 명령을 실행하여 Azure.Messaging.EventGrid NuGet 패키지를 설치합니다. 아직 설정되지 않은 경우 기본 프로젝트에 대해 EventReceiver를 선택합니다.

    Install-Package Azure.Messaging.EventGrid.Namespaces
    

    패키지 관리자 콘솔에서 선택된 EventReceiver 프로젝트를 보여 주는 스크린샷.

토픽에서 이벤트를 수신하는 코드를 추가합니다.

이 섹션에서는 큐에서 메시지를 검색하는 코드를 추가합니다.

  1. Program 클래스 내에 다음 코드를 추가합니다.

    Important

    네임스페이스 엔드포인트, 토픽 이름, 토픽 키, 토픽 구독 이름을 사용하여 코드 조각의 자리 표시자 값(<NAMESPACE-ENDPOINT> , <TOPIC-NAME>, <TOPIC-ACCESS-KEY>, <TOPIC-SUBSCRIPTION-NAME>)을 업데이트합니다.

    using Azure;
    using Azure.Messaging;
    using Azure.Messaging.EventGrid.Namespaces;
    
    // TODO: Replace the following placeholders with appropriate values
    
    // Endpoint of the namespace that you can find on the Overview page for your Event Grid namespace
    // Example: https://namespace01.eastus-1.eventgrid.azure.net. 
    var namespaceEndpoint = "<NAMESPACE-ENDPOINT>"; // Should be in the form: https://namespace01.eastus-1.eventgrid.azure.net. 
    
    // Name of the topic in the namespace
    var topicName = "<TOPIC-NAME>";
    
    // Access key for the topic
    var topicKey = "<TOPIC-ACCESS-KEY>";
    
    // Name of the subscription to the topic
    var subscriptionName = "<TOPIC-SUBSCRIPTION-NAME>";
    
    // Maximum number of events you want to receive
    const short MaxEventCount = 3;
    
    // Construct the client using an Endpoint for a namespace as well as the access key
    var client = new EventGridReceiverClient(new Uri(namespaceEndpoint), topicName, subscriptionName, new AzureKeyCredential(topicKey));
    
    // Receive the published CloudEvents. 
    ReceiveResult result = await client.ReceiveAsync(MaxEventCount);
    
    Console.WriteLine("Received Response");
    Console.WriteLine("-----------------");
    
    
  2. Program 클래스 끝에 다음 메서드를 추가합니다.

    // handle received messages. Define these variables on the top.
    
    var toRelease = new List<string>();
    var toAcknowledge = new List<string>();
    var toReject = new List<string>();
    
    // Iterate through the results and collect the lock tokens for events we want to release/acknowledge/result
    
    foreach (ReceiveDetails detail in result.Details)
    {
        CloudEvent @event = detail.Event;
        BrokerProperties brokerProperties = detail.BrokerProperties;
        Console.WriteLine(@event.Data.ToString());
    
        // The lock token is used to acknowledge, reject or release the event
        Console.WriteLine(brokerProperties.LockToken);
        Console.WriteLine();
    
        // If the event is from the "employee_source" and the name is "Bob", we are not able to acknowledge it yet, so we release it
        if (@event.Source == "employee_source" && @event.Data.ToObjectFromJson<TestModel>().Name == "Bob")
        {
            toRelease.Add(brokerProperties.LockToken);
        }
        // acknowledge other employee_source events
        else if (@event.Source == "employee_source")
        {
            toAcknowledge.Add(brokerProperties.LockToken);
        }
        // reject all other events
        else
        {
            toReject.Add(brokerProperties.LockToken);
        }
    }
    
    // Release/acknowledge/reject the events
    
    if (toRelease.Count > 0)
    {
        ReleaseResult releaseResult = await client.ReleaseAsync(toRelease);
    
        // Inspect the Release result
        Console.WriteLine($"Failed count for Release: {releaseResult.FailedLockTokens.Count}");
        foreach (FailedLockToken failedLockToken in releaseResult.FailedLockTokens)
        {
            Console.WriteLine($"Lock Token: {failedLockToken.LockToken}");
            Console.WriteLine($"Error Code: {failedLockToken.Error}");
            Console.WriteLine($"Error Description: {failedLockToken.ToString}");
        }
    
        Console.WriteLine($"Success count for Release: {releaseResult.SucceededLockTokens.Count}");
        foreach (string lockToken in releaseResult.SucceededLockTokens)
        {
            Console.WriteLine($"Lock Token: {lockToken}");
        }
        Console.WriteLine();
    }
    
    if (toAcknowledge.Count > 0)
    {
        AcknowledgeResult acknowledgeResult = await client.AcknowledgeAsync(toAcknowledge);
    
        // Inspect the Acknowledge result
        Console.WriteLine($"Failed count for Acknowledge: {acknowledgeResult.FailedLockTokens.Count}");
        foreach (FailedLockToken failedLockToken in acknowledgeResult.FailedLockTokens)
        {
            Console.WriteLine($"Lock Token: {failedLockToken.LockToken}");
            Console.WriteLine($"Error Code: {failedLockToken.Error}");
            Console.WriteLine($"Error Description: {failedLockToken.ToString}");
        }
    
        Console.WriteLine($"Success count for Acknowledge: {acknowledgeResult.SucceededLockTokens.Count}");
        foreach (string lockToken in acknowledgeResult.SucceededLockTokens)
        {
            Console.WriteLine($"Lock Token: {lockToken}");
        }
        Console.WriteLine();
    }
    
    if (toReject.Count > 0)
    {
        RejectResult rejectResult = await client.RejectAsync(toReject);
    
        // Inspect the Reject result
        Console.WriteLine($"Failed count for Reject: {rejectResult.FailedLockTokens.Count}");
        foreach (FailedLockToken failedLockToken in rejectResult.FailedLockTokens)
        {
            Console.WriteLine($"Lock Token: {failedLockToken.LockToken}");
            Console.WriteLine($"Error Code: {failedLockToken.Error}");
            Console.WriteLine($"Error Description: {failedLockToken.ToString}");
        }
    
        Console.WriteLine($"Success count for Reject: {rejectResult.SucceededLockTokens.Count}");
        foreach (string lockToken in rejectResult.SucceededLockTokens)
        {
            Console.WriteLine($"Lock Token: {lockToken}");
        }
        Console.WriteLine();
    }
    
    public class TestModel
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }    
    
    
  3. 솔루션 탐색기 창에서 EventReceiver 프로젝트를 마우스 오른쪽 단추로 클릭하고 시작 프로젝트로 설정을 선택합니다.

  4. 프로그램을 빌드하고 오류가 없는지 확인합니다.

  5. EventReceiver 애플리케이션을 실행하고 출력 창에 세 개의 이벤트가 표시되는지 확인합니다.

    Receiver 앱의 출력을 보여 주는 스크린샷.

리소스 정리

Azure Portal에서 Event Grid 네임스페이스로 이동하고 Azure Portal에서 삭제를 선택하여 Event Grid 네임스페이스와 그 안의 토픽을 삭제합니다.

.NET API 참조를 참조하세요.