Azure Service Bus 토픽 및 구독 시작.NET)

이 빠른 시작에서는 Azure.Messaging.ServiceBus .NET 라이브러리를 사용하여 Service 버스 토픽에 메시지를 보내고 해당 토픽에 대한 구독에서 메시지를 수신하는 방법을 보여 줍니다.

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

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

참고 항목

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

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

필수 조건

이 서비스를 처음 사용하는 경우 이 빠른 시작 전에 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 Portal에 로그인합니다.

  2. 모든 서비스 페이지이동합니다.

  3. 왼쪽 탐색 모음의 범주 목록에서 통합을 선택하고 Service Bus 위로 마우스를 가리킨 다음 Service Bus 타일에서 단추를 선택합니다+.

    Image showing selection of Create a resource, Integration, and then Service Bus in the menu.

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

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

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

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

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

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

      Important

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

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

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

      Image showing the Create a namespace page

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

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

    Image showing the deployment succeeded page with the Go to resource link.

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

    Image showing the home page of the Service Bus namespace created.

Azure Portal을 사용하여 항목 만들기

  1. Service Bus 네임스페이스 페이지의 왼쪽 메뉴에서 항목을 선택합니다.

  2. 도구 모음에서 + 항목을 선택합니다.

  3. 항목의 이름을 입력합니다. 다른 옵션은 기본값 그대로 둡니다.

  4. 만들기를 실행합니다.

    Image showing the Create topic page.

항목에 대한 구독 만들기

  1. 이전 섹션에서 만든 항목을 선택합니다.

    Image showing the selection of topic from the list of topics.

  2. Service Bus 토픽 페이지의 도구 모음에서 + 구독을 선택합니다.

    Image showing the Add subscription button.

  3. 구독 만들기 페이지에서 다음 단계를 수행합니다.

    1. 구독 이름S1을 입력합니다.

    2. 최대 전달 횟수3을 입력합니다.

    3. 그런 다음, 만들기를 선택하여 구독을 만듭니다.

      Image showing the Create subscription page.

Azure에 앱 인증

이 빠른 시작에서는 Azure Service Bus에 연결하는 두 가지 방법인 암호 없음연결 문자열을 보여줍니다.

첫 번째 옵션은 Microsoft Entra ID 및 RBAC(역할 기반 액세스 제어)의 보안 주체를 사용하여 Service Bus 네임스페이스에 연결하는 방법을 보여 줍니다. 코드, 구성 파일 또는 Azure Key Vault와 같은 보안 스토리지에 하드 코딩된 연결 문자열이 있는지 걱정할 필요가 없습니다.

두 번째 옵션은 연결 문자열을 사용하여 Service Bus 네임스페이스에 연결하는 방법을 보여줍니다. Azure를 처음 사용하는 경우 연결 문자열 옵션이 더 쉬울 수 있습니다. 실제 애플리케이션 및 프로덕션 환경에서는 암호 없는 옵션을 사용하는 것이 좋습니다. 자세한 내용은 인증 및 권한 부여를 참조하세요. 개요 페이지에서 암호 없는 인증에 대해 자세히 알아볼 수도 있습니다.

Microsoft Entra 사용자에게 역할 할당

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

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

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 데이터 보내는 사람: 이 역할을 사용하여 Service Bus 네임스페이스 및 해당 엔터티에 대한 전송 액세스 권한을 부여합니다.
  • Azure Service Bus 데이터 받는 사람: 이 역할을 사용하여 Service Bus 네임스페이스 및 해당 엔터티에 대한 수신 액세스 권한을 부여합니다.

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

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

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

Important

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

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

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

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

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

    A screenshot showing how to assign a role.

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

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

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

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

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

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

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

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

    Screenshot showing the button to sign in to Azure using Visual Studio.

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

    Screenshot showing the account selection.

토픽에 메시지 보내기

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

참고 항목

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

콘솔 애플리케이션 만들기

  1. Visual Studio에서 파일 ->새로 만들기 ->프로젝트 메뉴를 선택합니다.
  2. 새 프로젝트 만들기 대화 상자에서 다음 단계를 수행합니다. 이 대화 상자가 표시되지 않으면 메뉴에서 파일을 선택하고 새로 만들기를 선택한 다음, 프로젝트를 선택합니다.
    1. 프로그래밍 언어로 C#을 선택합니다.

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

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

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

      Image showing the Create a new project dialog box with C# and Console selected

  3. 프로젝트 이름에 TopicSender를 입력하고 솔루션 이름에 ServiceBusTopicQuickStart를 입력한 후 다음을 선택합니다.
  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의 내용을 다음 코드로 바꿉니다. 이 섹션에는 중요한 단계가 설명되어 있으며 코드 주석에 추가 정보가 나와 있습니다.

    1. DefaultAzureCredential 개체를 사용하여 ServiceBusClient 개체를 만듭니다. DefaultAzureCredential은 Visual Studio 로그인의 자격 증명을 자동으로 발견하고 사용하여 Azure Service Bus에 인증합니다.
    2. ServiceBusClient 개체에서 CreateSender 메서드를 호출하여 특정 Service Bus 토픽에 대한 ServiceBusSender 개체를 만듭니다.
    3. ServiceBusSender.CreateMessageBatchAsync를 사용하여 ServiceBusMessageBatch 개체를 만듭니다.
    4. ServiceBusMessageBatch.TryAddMessage를 사용하여 일괄 처리에 메시지를 추가합니다.
    5. ServiceBusSender.SendMessagesAsync 메서드를 사용하여 메시지 일괄 처리를 Service Bus 토픽에 보냅니다.

    Important

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

    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 sender used to publish messages to the topic
    ServiceBusSender sender;
    
    // number of messages to be sent to the topic
    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.
    
    //TODO: Replace the "<NAMESPACE-NAME>" and "<TOPIC-NAME>" placeholders.
    client = new ServiceBusClient(
        "<NAMESPACE-NAME>.servicebus.windows.net",
        new DefaultAzureCredential());
    sender = client.CreateSender("<TOPIC-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 topic
        await sender.SendMessagesAsync(messageBatch);
        Console.WriteLine($"A batch of {numOfMessages} messages has been published to the topic.");
    }
    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 topic
    

    Important

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

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

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

    2. 개요 페이지의 아래쪽 가운데 창에서 토픽 탭으로 전환하고, Service Bus 토픽을 선택합니다. 다음 예에서는 mytopic입니다.

      Select topic

    3. Service Bus 토픽 페이지 아래쪽의 메트릭 섹션에 있는 메시지 차트에서 해당 토픽에 대해 들어오는 메시지가 세 개 있음을 확인할 수 있습니다. 값이 표시되지 않으면 몇 분 동안 기다렸다가 페이지를 새로 고쳐 업데이트된 차트를 확인합니다.

      Messages sent to the topic

    4. 아래쪽 창에서 구독을 선택합니다. 다음 예에서는 S1입니다. Service Bus 구독 페이지에 활성 메시지 수3으로 표시됩니다. 토픽으로 보낸 메시지 3개를 구독에서 받았지만 받는 사람이 아직 선택하지 않았습니다.

      Messages received at the subscription

구독에서 메시지 받기

이 섹션에서는 Service Bus 토픽에 대한 구독에서 메시지를 받는 .NET 콘솔 애플리케이션을 만듭니다.

참고 항목

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

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

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

프로젝트에 NuGet 패키지 추가

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

  2. 기본 프로젝트 드롭다운 목록에서 SubscriptionReceiver를 선택합니다.

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

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

    Install-Package Azure.Identity
    

코드를 추가하여 구독에서 메시지 받기

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

  1. Program.cs의 기존 내용을 다음 속성 및 메서드로 바꿉니다.

    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 subscription
    ServiceBusProcessor processor;    
    
    // handle received messages
    async Task MessageHandler(ProcessMessageEventArgs args)
    {
        string body = args.Message.Body.ToString();
        Console.WriteLine($"Received: {body} from subscription.");
    
        // complete the message. messages is deleted from the subscription. 
        await args.CompleteMessageAsync(args.Message);
    }
    
    // handle any errors when receiving messages
    Task ErrorHandler(ProcessErrorEventArgs args)
    {
        Console.WriteLine(args.Exception.ToString());
        return Task.CompletedTask;
    }
    
  2. Program.cs의 끝에 다음 코드를 추가합니다.

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

    Important

    코드 조각의 자리 표시자 값(<NAMESPACE-NAME>, <TOPIC-NAME>, <SUBSCRIPTION-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.
    //
    // Create the clients that we'll use for sending and processing messages.
    // TODO: Replace the <NAMESPACE-NAME> placeholder
    client = new ServiceBusClient(
        "<NAMESPACE-NAME>.servicebus.windows.net",
        new DefaultAzureCredential());
    
    // create a processor that we can use to process the messages
    // TODO: Replace the <TOPIC-NAME> and <SUBSCRIPTION-NAME> placeholders
    processor = client.CreateProcessor("<TOPIC-NAME>", "<SUBSCRIPTION-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();
    }
    
  3. Program.cs는 다음과 같아야 합니다.

    using System;
    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 subscription
    ServiceBusProcessor processor;
    
    // handle received messages
    async Task MessageHandler(ProcessMessageEventArgs args)
    {
        string body = args.Message.Body.ToString();
        Console.WriteLine($"Received: {body} from subscription.");
    
        // complete the message. messages is deleted from the subscription. 
        await args.CompleteMessageAsync(args.Message);
    }
    
    // handle any errors when receiving messages
    Task ErrorHandler(ProcessErrorEventArgs args)
    {
        Console.WriteLine(args.Exception.ToString());
        return Task.CompletedTask;
    }
    
    // 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.
    //
    // Create the clients that we'll use for sending and processing messages.
    // TODO: Replace the <NAMESPACE-NAME> placeholder
    client = new ServiceBusClient(
        "<NAMESPACE-NAME>.servicebus.windows.net",
        new DefaultAzureCredential());
    
    // create a processor that we can use to process the messages
    // TODO: Replace the <TOPIC-NAME> and <SUBSCRIPTION-NAME> placeholders
    processor = client.CreateProcessor("<TOPIC-NAME>", "<SUBSCRIPTION-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. 프로그램을 빌드하고 오류가 없는지 확인합니다.

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

    Wait for a minute and then press any key to end the processing
    Received: Message 1 from subscription: S1
    Received: Message 2 from subscription: S1
    Received: Message 3 from subscription: S1
    
    Stopping the receiver...
    Stopped receiving messages
    
  6. 포털을 다시 확인합니다.

    • Service Bus 토픽 페이지의 메시지 차트에 3개의 들어오는 메시지와 3개의 나가는 메시지가 표시됩니다. 이러한 숫자가 표시되지 않으면 몇 분 동안 기다렸다가 페이지를 새로 고쳐 업데이트된 차트를 확인합니다.

      Messages sent and received

    • Service Bus 구독 페이지에 활성 메시지 수가 0으로 표시됩니다. 받는 사람이 이 구독에서 메시지를 받고 메시지를 완료했기 때문입니다.

      Active message count at the subscription at the end

다음 단계

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