빠른 시작: Azure Service Bus 큐(.NET)에서 메시지 보내기 및 받기

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

  1. Azure Portal을 사용하여 Service Bus 네임스페이스를 만듭니다.
  2. Azure Portal을 사용하여 Service Bus 큐를 만듭니다.
  3. .NET 콘솔 애플리케이션을 작성하여 큐에 메시지 집합을 보냅니다.
  4. 큐에서 해당 메시지를 수신하는 .NET 콘솔 애플리케이션을 작성합니다.

참고

이 빠른 시작은 메시지 일괄 처리를 Service Bus 큐로 보낸 다음 받는 간단한 시나리오를 구현하기 위한 단계별 지침을 제공합니다. .NET 클라이언트 라이브러리에 대한 개요는 .NET용 Azure Service Bus 클라이언트 라이브러리를 참조하세요. 더 많은 샘플은 GitHub의 Service Bus .NET 샘플을 참조하세요.

사전 요구 사항

이 서비스를 처음 사용하는 경우 이 빠른 시작 전에 Service Bus 개요를 참조하세요.

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

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

Azure에서 Service Bus 메시징 엔터티 사용을 시작하려면 먼저 Azure에서 고유한 이름인 네임스페이스를 만들어야 합니다. 네임스페이스는 애플리케이션 내의 Service Bus 리소스에 대한 범위 지정 컨테이너를 제공합니다.

네임스페이스를 만들려면

  1. Azure 포털

  2. 포털의 왼쪽 탐색 창에서 모든 서비스를 선택하고 범주 목록에서 통합 을 선택하고 Service Bus 위로 마우스를 가리킨 다음 Service Bus 타일에서 만들기 를 선택합니다.

    메뉴에서 리소스 만들기, 통합, Service Bus 선택을 보여 주는 이미지

  3. 네임스페이스 만들기 페이지의 기본 사항 태그에서 다음 단계를 수행합니다.

    1. 구독에 대해 네임스페이스를 만들 Azure 구독을 선택합니다.

    2. 리소스 그룹에 대해 네임스페이스가 있는 기존 리소스 그룹을 선택하거나 새로 만듭니다.

    3. 네임스페이스 이름을 입력합니다. 네임스페이스 이름은 다음 명명 규칙을 따라야 합니다.

      • 이름은 Azure에서 고유해야 합니다. 시스템에서 사용 가능한 이름인지 즉시 확인합니다.
      • 이름 길이는 6~50자 사이여야 합니다.
      • 이름에는 문자, 숫자 및 하이픈 “-”만 포함할 수 있습니다.
      • 이름은 문자로 시작하고 문자나 숫자로 끝나야 합니다.
      • 이름은 "-sb" 또는 "-mgmt"로 끝나지 않습니다.
    4. 위치에 대해 네임스페이스가 호스팅되어야하는 지역을 선택합니다.

    5. 가격 책정 계층에 대해 네임스페이스에 대한 가격 책정 계층(기본, 표준 또는 프리미엄)을 선택합니다. 이 빠른 시작의 경우 표준을 선택합니다.

      중요

      토픽 및 구독을 사용하려면 표준 또는 프리미엄을 선택합니다. 토픽/구독은 기본 가격 책정 계층에서 지원되지 않습니다.

      프리미엄 가격 책정 계층을 선택한 경우 메시징 단위 수를 지정합니다. 프리미엄 계층은 CPU 및 메모리 수준에서 리소스 격리를 제공하므로 각 워크로드가 독립적으로 실행됩니다. 이 리소스 컨테이너를 메시징 단위라고 합니다. 프리미엄 네임스페이스에는 하나 이상의 메시징 단위가 있습니다. 각 Service Bus 프리미엄 네임스페이스에 대해 1, 2, 4, 8 또는 16개의 메시징 단위를 선택할 수 있습니다. 자세한 내용은 Service Bus 프리미엄 메시징을 참조하세요.

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

      네임스페이스 만들기 페이지를 보여 주는 이미지

    7. 검토 + 만들기 페이지에서 설정을 검토하고 만들기를 선택합니다.

  4. 리소스 배포에 성공하면 배포 페이지에서 리소스로 이동을 선택합니다.

    리소스로 이동 링크가 있는 배포 성공 페이지를 보여 주는 이미지

  5. Service Bus 네임스페이스에 대한 홈페이지가 표시됩니다.

    만든 Service Bus 네임스페이스의 홈페이지를 보여 주는 이미지

Azure Portal에서 큐 만들기

  1. Service Bus 네임스페이스 페이지의 왼쪽 탐색 메뉴에서 를 선택합니다.

  2. 페이지의 도구 모음에서 + 큐를 선택합니다.

  3. 이름을 입력하고 다른 값은 기본값으로 유지합니다.

  4. 이제 만들기를 선택합니다.

    포털에서 큐 만들기를 보여 주는 이미지

Azure에 앱 인증

이 빠른 시작에서는 암호 없는 문자열과 연결 문자열이라는 두 가지 Azure Service Bus 연결하는 방법을 보여줍니다. 첫 번째 옵션은 Azure Active Directory 및 RBAC(역할 기반 액세스 제어)에서 보안 주체를 사용하여 Service Bus 네임스페이스에 연결하는 방법을 보여 줍니다. 코드 또는 구성 파일 또는 Azure Key Vault 같은 보안 스토리지에 하드 코딩된 연결 문자열이 있는 것에 대해 걱정할 필요가 없습니다. 두 번째 옵션은 연결 문자열을 사용하여 Service Bus 네임스페이스에 연결하는 방법을 보여줍니다. Azure를 접하는 경우 연결 문자열 옵션을 더 쉽게 따를 수 있습니다. 실제 애플리케이션 및 프로덕션 환경에서 암호 없는 옵션을 사용하는 것이 좋습니다. 자세한 내용은 인증 및 권한 부여를 참조하세요. 암호 없는 인증에 대한 자세한 내용은 개요 페이지에서 확인할 수도 있습니다.

Azure AD 사용자에게 역할 할당

로컬로 개발할 때 Azure Service Bus 연결하는 사용자 계정에 올바른 권한이 있는지 확인합니다. 메시지를 보내고 받으려면 Azure Service Bus 데이터 소유자 역할이 필요합니다. 이 역할을 자신에게 할당하려면 사용자 액세스 관리자 역할 또는 작업을 포함하는 Microsoft.Authorization/roleAssignments/write 다른 역할이 필요합니다. Azure Portal, Azure CLI 또는 Azure PowerShell을 사용하여 사용자에게 Azure RBAC 역할을 할당할 수 있습니다. 범위 개요 페이지에서 역할 할당에 사용할 수 있는 범위에 대해 자세히 알아봅니다.

다음 예제에서는 Azure Service Bus Data Owner Azure Service Bus 리소스에 대한 모든 권한을 제공하는 역할을 사용자 계정에 할당합니다. 실제 시나리오에서는 최소 권한 원칙 에 따라 사용자에게 보다 안전한 프로덕션 환경에 필요한 최소 권한만 부여합니다.

Azure Service Bus에 대한 Azure 기본 제공 역할

Azure Service Bus의 경우 Azure Portal 및 Azure 리소스 관리 API를 통한 네임스페이스 및 관련된 모든 리소스의 관리는 이미 Azure RBAC 모델을 사용하여 보호되고 있습니다. Azure는 Service Bus 네임스페이스에 대한 액세스 권한을 부여하기 위해 아래와 같은 Azure 기본 제공 역할을 제공합니다.

  • Azure Service Bus 데이터 소유자: Service Bus 네임스페이스 및 해당 엔터티(큐, 토픽, 구독 및 필터)에 대한 데이터 액세스를 사용하도록 설정합니다. 이 역할의 멤버는 큐 또는 토픽/구독에서 메시지를 보내고 받을 수 있습니다.
  • Azure Service Bus Data Sender: 이 역할을 사용하여 Service Bus 네임스페이스 및 해당 엔터티에 대한 송신 액세스 권한을 부여합니다.
  • Azure Service Bus 데이터 수신기: 이 역할을 사용하여 수신에 Service Bus 네임스페이스 및 해당 엔터티에 대한 액세스 권한을 부여합니다.

사용자 지정 역할을 만들려면 Service Bus 작업에 필요한 권한을 참조하세요.

Azure Service Bus 소유자 역할에 Azure AD 사용자 추가

service Bus 네임스페이스 수준의 Azure Service Bus 데이터 소유자 역할에 Azure AD 사용자 이름을 추가합니다. 사용자 계정의 컨텍스트에서 실행되는 앱이 큐 또는 토픽에 메시지를 보내고 큐 또는 토픽의 구독에서 메시지를 받을 수 있습니다.

중요

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

  1. Azure Portal Service Bus 네임스페이스 페이지가 열려 있지 않은 경우 기본 검색 창 또는 왼쪽 탐색 모음을 사용하여 Service Bus 네임스페이스를 찾습니다.

  2. 개요 페이지의 왼쪽 메뉴에서 액세스 제어(IAM) 를 선택합니다.

  3. 액세스 제어(IAM) 페이지에서 역할 할당 탭을 선택합니다.

  4. 위쪽 메뉴에서 + 추가를 선택한 다음, 드롭다운 메뉴에서 역할 할당 추가를 선택합니다.

    역할을 할당하는 방법을 보여 주는 스크린샷

  5. 검색 상자를 사용하여 결과를 원하는 역할로 필터링합니다. 이 예제에서는 일치하는 결과를 검색 Azure Service Bus Data Owner 하여 선택합니다. 다음을 선택합니다.

  6. 다음에 대한 액세스 할당 아래에서 사용자, 그룹 또는 서비스 주체를 선택한 다음, + 멤버 선택을 선택합니다.

  7. 대화 상자에서 Azure AD 사용자 이름(일반적으로 user@domain 이메일 주소)을 검색한 다음, 대화 상자 아래쪽에서 선택을 선택합니다.

  8. 검토 + 할당을 선택하여 최종 페이지로 이동한 다음, 검토 + 할당을 다시 선택하여 프로세스를 완료합니다.

Visual Studio를 시작하고 Azure에 로그인

다음 단계를 사용하여 Service Bus 네임스페이스에 대한 액세스 권한을 부여할 수 있습니다.

  1. Visual Studio를 실행합니다. 시작 창이 표시되면 오른쪽 창에서 코드 없이 계속 링크를 선택합니다.

  2. Visual Studio의 오른쪽 위에서 로그인 단추를 선택합니다.

    Visual Studio를 사용하여 Azure에 로그인하는 단추를 보여 주는 스크린샷

  3. 이전에 역할을 할당한 Azure AD 계정을 사용하여 로그인합니다.

    계정 선택을 보여 주는 스크린샷

큐에 메시지 보내기

이 섹션에서는 .NET 콘솔 애플리케이션을 만들어 Service Bus 큐에 메시지를 보내는 방법을 보여 드립니다.

참고

이 빠른 시작은 메시지 일괄 처리를 Service Bus 큐로 보낸 다음 받는 간단한 시나리오를 구현하기 위한 단계별 지침을 제공합니다. 기타 및 고급 시나리오에 대한 추가 샘플은 GitHub의 Service Bus .NET 샘플을 참조하세요.

콘솔 애플리케이션 만들기

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

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

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

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

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

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

      C# 및 콘솔이 선택된 새 프로젝트 만들기 대화 상자를 보여 주는 이미지

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

    새 프로젝트 구성 대화 상자의 솔루션 및 프로젝트 이름을 보여 주는 이미지

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

프로젝트에 NuGet 패키지 추가

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

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

    Install-Package Azure.Messaging.ServiceBus
    
  3. 다음 명령을 실행하여 Azure.Identity NuGet 패키지를 설치합니다.

    Install-Package Azure.Identity
    

메시지를 큐에 보내는 코드 추가

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

    중요

    코드 조각의 자리 표시자 값(<NAMESPACE-CONNECTION-STRING><QUEUE-NAME>)을 Service Bus 네임스페이스 및 큐의 이름으로 업데이트합니다.

    using Azure.Messaging.ServiceBus;
    using Azure.Identity;
    
    // name of your Service Bus queue
    // the client that owns the connection and can be used to create senders and receivers
    ServiceBusClient client;
    
    // the sender used to publish messages to the queue
    ServiceBusSender sender;
    
    // number of messages to be sent to the queue
    const int numOfMessages = 3;
    
    // The Service Bus client types are safe to cache and use as a singleton for the lifetime
    // of the application, which is best practice when messages are being published or read
    // regularly.
    //
    // Set the transport type to AmqpWebSockets so that the ServiceBusClient uses the port 443. 
    // If you use the default AmqpTcp, ensure that ports 5671 and 5672 are open.
    var clientOptions = new ServiceBusClientOptions
    { 
        TransportType = ServiceBusTransportType.AmqpWebSockets
    };
    //TODO: Replace the "<NAMESPACE-NAME>" and "<QUEUE-NAME>" placeholders.
    client = new ServiceBusClient(
        "<NAMESPACE-NAME>.servicebus.windows.net",
        new DefaultAzureCredential(),
        clientOptions);
    sender = client.CreateSender("<QUEUE-NAME>");
    
    // create a batch 
    using ServiceBusMessageBatch messageBatch = await sender.CreateMessageBatchAsync();
    
    for (int i = 1; i <= numOfMessages; i++)
    {
        // try adding a message to the batch
        if (!messageBatch.TryAddMessage(new ServiceBusMessage($"Message {i}")))
        {
            // if it is too large for the batch
            throw new Exception($"The message {i} is too large to fit in the batch.");
        }
    }
    
    try
    {
        // Use the producer client to send the batch of messages to the Service Bus queue
        await sender.SendMessagesAsync(messageBatch);
        Console.WriteLine($"A batch of {numOfMessages} messages has been published to the queue.");
    }
    finally
    {
        // Calling DisposeAsync on client types is required to ensure that network
        // resources and other unmanaged objects are properly cleaned up.
        await sender.DisposeAsync();
        await client.DisposeAsync();
    }
    
    Console.WriteLine("Press any key to end the application");
    Console.ReadKey();
    
  2. 프로그램을 빌드하고 오류가 없는지 확인합니다.

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

    A batch of 3 messages has been published to the queue
    

    중요

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

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

    1. Service Bus 네임스페이스로 이동합니다.

    2. 개요 페이지의 아래쪽 가운데 창에서 큐를 선택합니다.

      Azure Portal에서 큐가 선택된 Service Bus 네임스페이스 페이지를 보여 주는 이미지

    3. 기본 정보 섹션의 값을 확인합니다.

      받은 메시지 수와 큐 크기를 보여 주는 이미지입니다.

    다음 값을 확인합니다.

    • 큐에 대한 활성 메시지 수 값은 이제 3입니다. 메시지를 검색하지 않고 이 보낸 사람 앱을 실행할 때마다 이 값이 3씩 증가합니다.
    • 큐의 현재 크기는 앱이 큐에 메시지를 추가할 때마다 증가합니다.
    • 아래쪽 메트릭 섹션의 메시지 차트에서 해당 큐에 대해 3개의 들어오는 메시지가 있음을 확인할 수 있습니다.

큐에서 메시지 받기

이 섹션에서는 큐에서 메시지를 받는 .NET 콘솔 애플리케이션을 만듭니다.

참고

이 빠른 시작에서는 메시지 일괄 처리를 Service Bus 큐로 보낸 다음 받는 시나리오를 구현하는 단계별 지침을 제공합니다. 기타 및 고급 시나리오에 대한 추가 샘플은 GitHub의 Service Bus .NET 샘플을 참조하세요.

수신기에 대한 프로젝트 만들기

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

프로젝트에 NuGet 패키지 추가

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

  2. 기본 프로젝트에대해 QueueReceiver를 선택합니다.

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

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

    Install-Package Azure.Messaging.ServiceBus
    
  4. 다음 명령을 실행하여 Azure.Identity NuGet 패키지를 설치합니다.

    Install-Package Azure.Identity
    

큐에서 메시지를 받는 코드 추가

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

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

    using System.Threading.Tasks;
    using Azure.Identity;
    using Azure.Messaging.ServiceBus;
    
    // the client that owns the connection and can be used to create senders and receivers
    ServiceBusClient client;
    
    // the processor that reads and processes messages from the queue
    ServiceBusProcessor processor;
    
  2. 클래스의 끝에 다음 메서드를 추가합니다 Program .

    // handle received messages
    async Task MessageHandler(ProcessMessageEventArgs args)
    {
        string body = args.Message.Body.ToString();
        Console.WriteLine($"Received: {body}");
    
        // complete the message. message is deleted from the queue. 
        await args.CompleteMessageAsync(args.Message);
    }
    
    // handle any errors when receiving messages
    Task ErrorHandler(ProcessErrorEventArgs args)
    {
        Console.WriteLine(args.Exception.ToString());
        return Task.CompletedTask;
    }
    
  3. 클래스의 끝에 다음 코드를 추가합니다 Program . 코드 주석에 추가 정보가 포함된 중요한 단계는 아래에 설명되어 있습니다.

    • 개체를 사용하여 ServiceBusClient 개체를 DefaultAzureCredential 만듭니다. DefaultAzureCredential는 Visual Studio 로그인의 자격 증명을 자동으로 검색하고 사용하여 Azure Service Bus 인증합니다.
    • ServiceBusClient 개체에서 CreateProcessor 메서드를 호출하여 지정된 Service Bus 큐에 대한 ServiceBusProcessor 개체를 생성합니다.
    • ServiceBusProcessor 개체의 ProcessMessageAsyncProcessErrorAsync 이벤트에 대한 처리기를 지정합니다.
    • ServiceBusProcessor 개체에서 StartProcessingAsync를 호출하여 메시지 처리를 시작합니다.
    • 사용자가 키를 눌러 처리를 종료하면 ServiceBusProcessor 객체에서 StopProcessingAsync를 호출합니다.

    중요

    코드 조각의 자리 표시자 값(<NAMESPACE-NAME><QUEUE-NAME>)을 Service Bus 네임스페이스 및 큐의 이름으로 업데이트합니다.

    // The Service Bus client types are safe to cache and use as a singleton for the lifetime
    // of the application, which is best practice when messages are being published or read
    // regularly.
    //
    // Set the transport type to AmqpWebSockets so that the ServiceBusClient uses port 443. 
    // If you use the default AmqpTcp, make sure that ports 5671 and 5672 are open.
    
    // TODO: Replace the <NAMESPACE-NAME> placeholder
    var clientOptions = new ServiceBusClientOptions()
    {
        TransportType = ServiceBusTransportType.AmqpWebSockets
    };
    client = new ServiceBusClient(
        "<NAMESPACE-NAME>.servicebus.windows.net",
        new DefaultAzureCredential(),
        clientOptions);
    
    // create a processor that we can use to process the messages
    // TODO: Replace the <QUEUE-NAME> placeholder
    processor = client.CreateProcessor("<QUEUE-NAME>", new ServiceBusProcessorOptions());
    
    try
    {
        // add handler to process messages
        processor.ProcessMessageAsync += MessageHandler;
    
        // add handler to process any errors
        processor.ProcessErrorAsync += ErrorHandler;
    
        // start processing 
        await processor.StartProcessingAsync();
    
        Console.WriteLine("Wait for a minute and then press any key to end the processing");
        Console.ReadKey();
    
        // stop processing 
        Console.WriteLine("\nStopping the receiver...");
        await processor.StopProcessingAsync();
        Console.WriteLine("Stopped receiving messages");
    }
    finally
    {
        // Calling DisposeAsync on client types is required to ensure that network
        // resources and other unmanaged objects are properly cleaned up.
        await processor.DisposeAsync();
        await client.DisposeAsync();
    }
    
  4. 완료된 Program 클래스는 다음 코드와 일치해야 합니다.

    using System.Threading.Tasks;
    using Azure.Messaging.ServiceBus;
    using Azure.Identity;
    
    // the client that owns the connection and can be used to create senders and receivers
    ServiceBusClient client;
    
    // the processor that reads and processes messages from the queue
    ServiceBusProcessor processor;
    
    // The Service Bus client types are safe to cache and use as a singleton for the lifetime
    // of the application, which is best practice when messages are being published or read
    // regularly.
    //
    // Set the transport type to AmqpWebSockets so that the ServiceBusClient uses port 443.
    // If you use the default AmqpTcp, make sure that ports 5671 and 5672 are open.
    
    // TODO: Replace the <NAMESPACE-NAME> and <QUEUE-NAME> placeholders
    var clientOptions = new ServiceBusClientOptions() 
    {
        TransportType = ServiceBusTransportType.AmqpWebSockets
    };
    client = new ServiceBusClient("<NAMESPACE-NAME>.servicebus.windows.net", 
        new DefaultAzureCredential(), clientOptions);
    
    // create a processor that we can use to process the messages
    // TODO: Replace the <QUEUE-NAME> placeholder
    processor = client.CreateProcessor("<QUEUE-NAME>", new ServiceBusProcessorOptions());
    
    try
    {
        // add handler to process messages
        processor.ProcessMessageAsync += MessageHandler;
    
        // add handler to process any errors
        processor.ProcessErrorAsync += ErrorHandler;
    
        // start processing 
        await processor.StartProcessingAsync();
    
        Console.WriteLine("Wait for a minute and then press any key to end the processing");
        Console.ReadKey();
    
        // stop processing 
        Console.WriteLine("\nStopping the receiver...");
        await processor.StopProcessingAsync();
        Console.WriteLine("Stopped receiving messages");
    }
    finally
    {
        // Calling DisposeAsync on client types is required to ensure that network
        // resources and other unmanaged objects are properly cleaned up.
        await processor.DisposeAsync();
        await client.DisposeAsync();
    }
    
    // handle received messages
    async Task MessageHandler(ProcessMessageEventArgs args)
    {
        string body = args.Message.Body.ToString();
        Console.WriteLine($"Received: {body}");
    
        // complete the message. message is deleted from the queue. 
        await args.CompleteMessageAsync(args.Message);
    }
    
    // handle any errors when receiving messages
    Task ErrorHandler(ProcessErrorEventArgs args)
    {
        Console.WriteLine(args.Exception.ToString());
        return Task.CompletedTask;
    }
    
  5. 프로그램을 빌드하고 오류가 없는지 확인합니다.

  6. 수신기 애플리케이션을 실행합니다. 받은 메시지가 표시됩니다. 아무 키나 눌러 수신기와 애플리케이션을 중지합니다.

    Wait for a minute and then press any key to end the processing
    Received: Message 1
    Received: Message 2
    Received: Message 3
    
    Stopping the receiver...
    Stopped receiving messages
    
  7. 포털을 다시 확인합니다. 활성 메시지로 0이 표시되지 않으면 몇 분 정도 기다렸다가 페이지를 새로 고칩니다.

    • 활성 메시지 수 및 현재 크기 값은 이제 0입니다.

    • 아래쪽 메트릭 섹션의 메시지 차트에서 해당 큐에 대해 3개의 들어오는 메시지와 3개의 나가는 메시지가 있음을 확인할 수 있습니다.

      수신 후 활성 메시지 및 크기를 보여 주는 스크린샷

리소스 정리

Azure Portal Service Bus 네임스페이스로 이동하고 Azure Portal 삭제를 선택하여 네임스페이스와 해당 네임스페이스의 큐를 삭제합니다.

참조

다음 설명서와 샘플을 참조하세요.

다음 단계