Azure Service Bus 큐를 사용하는 .NET 다중 계층 애플리케이션

Visual Studio 및 무료로 제공되는 Azure SDK for .NET을 사용하면 Microsoft Azure용 개발이 간단합니다. 이 자습서에서는 로컬 환경에서 실행되는 여러 Azure 리소스를 사용하는 애플리케이션을 만드는 단계를 안내합니다.

다음과 같은 내용을 알아봅니다.

  • 한 번 다운로드하고 설치하여 Azure 개발용 컴퓨터를 사용하도록 설정하는 방법
  • Visual Studio를 사용하여 Azure용으로 개발하는 방법
  • 웹 및 작업자 역할을 사용하여 Azure에서 다중 계층 애플리케이션을 만드는 방법
  • Service Bus 큐를 사용하여 계층 간에 통신하는 방법입니다.

참고 항목

이 자습서를 완료하려면 Azure 계정이 필요합니다. MSDN 구독자 혜택을 활성화하거나 무료 계정을 등록할 수 있습니다.

이 자습서에서는 Azure Cloud Service에서 다중 계층 애플리케이션을 빌드하고 실행합니다. 프런트 엔드는 ASP.NET MVC 웹 역할이고 백 엔드는 Service Bus 큐를 사용하는 작업자 역할입니다. 클라우드 서비스가 아닌 Azure 웹 사이트에 배포되는 웹 프로젝트와 동일한 다중 계층 애플리케이션(프런트 엔드 포함)을 만들 수 있습니다. .NET 온-프레미스/클라우드 하이브리드 애플리케이션 자습서를 시도해 볼 수 있습니다.

다음 스크린샷에 완성된 애플리케이션이 나와 있습니다.

Application's Submit page

시나리오 개요: 역할 간 통신

처리할 주문을 제출하려면 웹 역할에서 실행되는 프런트 엔드 UI 구성 요소가 작업자 역할에서 실행되는 중간 계층 논리와 상호 작용해야 합니다. 이 예제에서는 계층 간 통신에 Service Bus 메시징을 사용합니다.

웹과 중간 계층 간에 Service Bus 메시징을 사용하면 두 구성 요소가 분리됩니다. 직접 메시징(즉, TCP 또는 HTTP)과 달리 웹 계층은 중간 계층에 직접 연결되지 않고 작업 단위를 메시지로 Service Bus에 푸시하여 중간 계층에서 사용하고 처리할 준비가 될 때까지 안정적으로 유지합니다.

Service Bus는 조정된 메시징을 지원하는 두 개의 엔터티인 큐와 토픽을 제공합니다. 큐를 사용하면 큐로 전송된 각 메시지가 단일 수신기에서 사용됩니다. 토픽은 게시된 각 메시지를 토픽에 등록된 구독에서 사용할 수 있게 하는 게시/구독 패턴을 지원합니다. 각 구독은 메시지의 고유한 큐를 논리적으로 유지 관리합니다. 또한 구독은 구독 큐에 전달되는 메시지 집합을 필터와 일치하는 메시지로 제한하는 필터 규칙을 사용하여 구성할 수 있습니다. 다음 예에서는 Service Bus 큐를 사용합니다.

Diagram showing the communication between the Web Role, Service Bus, and the Worker Role.

이 통신 메커니즘은 직접 메시징에 비해 몇 가지 장점이 있습니다.

  • 임시 분리 비동기 메시징 패턴을 사용하면 생산자와 소비자가 동시에 온라인 상태일 필요가 없습니다. Service Bus는 소비하는 쪽에서 메시지를 수신할 준비가 될 때까지 메시지를 안정적으로 저장합니다. 따라서 전체 시스템에는 영향을 주지 않고 자발적으로(예: 유지 관리의 경우) 또는 구성 요소 크래시로 인해 분산 애플리케이션 구성 요소의 연결을 끊을 수 있습니다. 또한 소비 애플리케이션은 하루 중 특정 기간 동안만 온라인 상태로 전환해야 할 수 있습니다.

  • 부하 평준화. 많은 애플리케이션에서 시스템 부하는 시간에 따라 다르지만 각 작업 단위에 필요한 처리 시간은 일반적으로 일정합니다. 큐를 사용한 메시지 생산자와 소비자 조정은 최대 부하가 아닌 평균 부하를 수용하려면 소비 애플리케이션(작업자)만 프로비전해야 함을 의미합니다. 수신 부하가 변경됨에 따라 큐의 깊이가 증가하고 축소됩니다. 따라서 애플리케이션 부하를 제공하는 데 필요한 인프라의 크기와 관련하여 비용이 직접적으로 절약됩니다.

  • 부하 분산 - 부하가 증가하면 뷰에서 읽을 작업자 프로세스가 더 추가될 수 있습니다. 각 메시지는 하나의 작업자 프로세스를 통해서만 처리됩니다. 또한 이 가져오기 기반 부하 분산에서는 작업자 머신이 최대 속도로 메시지를 가져올 때 처리 능력이 다른 경우에도 작업자 머신의 최적 사용률을 허용합니다. 이 패턴을 종종 경쟁 소비자 패턴이라고 부릅니다.

    Diagram showing the communication between the Web Role, the Service Bus, and two Worker Roles.

다음 섹션에서는 이 아키텍처를 구현하는 코드에 대해 설명합니다.

필수 조건

이 자습서에서는 Microsoft Entra 인증을 사용하여 ServiceBusClientServiceBusAdministrationClient 개체를 만듭니다. DefaultAzureCredential도 사용합니다. 이를 사용하려면 다음 단계를 수행하여 개발 환경에서 애플리케이션을 로컬로 테스트해야 합니다.

  1. Microsoft Entra ID에 애플리케이션을 등록합니다.
  2. 애플리케이션을 Service Bus Data Owner 역할에 추가합니다.
  3. AZURE-CLIENT-ID, AZURE-TENANT-ID, AZURE-CLIENT-SECRET 환경 변수를 설정합니다. 지침은 이 문서를 참조하세요.

Service Bus 기본 제공 역할 목록은 Service Bus에 대한 Azure 기본 제공 역할을 참조하세요.

네임스페이스 만들기

첫 번째 단계에서는 네임스페이스를 만들고 해당 네임스페이스에 대한 SAS(공유 액세스 서명) 키를 얻습니다. 네임스페이스는 Service Bus를 통해 노출되는 각 애플리케이션에 대한 애플리케이션 경계를 제공합니다. SAS 키는 네임스페이스가 만들어질 때 시스템에 의해 자동으로 생성됩니다. 네임스페이스 이름 및 SAS 키 조합은 Service Bus에 자격 증명을 제공하여 애플리케이션에 대한 액세스를 인증합니다.

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)

새 네임스페이스를 만들면 기본 키 및 보조 키와 각각 네임스페이스의 모든 측면에 대한 전체 제어 권한을 부여하는 기본 및 보조 연결 문자열이 포함된 초기 SAS(공유 액세스 서명) 정책이 자동으로 생성됩니다. 일반적인 보낸 사람과 받는 사람에 대해 자세히 제한된 권한이 적용된 규칙을 만드는 방법에 대한 자세한 내용은 Service Bus 인증 및 권한 부여를 참조하세요.

클라이언트는 연결 문자열을 사용하여 Service Bus 네임스페이스에 연결할 수 있습니다. 네임스페이스에 대한 기본 연결 문자열을 복사하려면 다음 단계를 수행합니다.

  1. Service Bus 네임스페이스 페이지의 왼쪽 메뉴에서 공유 액세스 정책을 선택합니다.

  2. 공유 액세스 정책 페이지에서 RootManageSharedAccessKey를 선택합니다.

  3. 정책: RootManageSharedAccessKey 창에서 기본 연결 문자열 옆의 복사 단추를 선택하여 나중에 사용할 수 있도록 연결 문자열을 클립보드에 복사합니다. 메모장이나 기타 다른 위치에 임시로 이 값을 붙여 넣습니다.

    Screenshot shows an S A S policy called RootManageSharedAccessKey, which includes keys and connection strings.

    이 페이지를 사용하여 기본 키, 보조 키, 기본 연결 문자열 및 보조 연결 문자열을 복사할 수 있습니다.

웹 역할 만들기

이 섹션에서는 애플리케이션의 프런트 엔드를 빌드합니다. 먼저 애플리케이션에서 표시하는 페이지를 만듭니다. 그런 다음 Service Bus 큐에 항목을 제출하고 큐에 대한 상태 정보를 표시하는 코드를 추가합니다.

프로젝트 만들기

  1. 관리자 권한을 사용하여 Visual Studio 시작: Visual Studio 프로그램 아이콘을 마우스 오른쪽 단추로 클릭한 다음, 관리자 권한으로 실행을 선택합니다. 이 문서의 뒷부분에서 설명하는 Azure Compute 에뮬레이터를 사용하려면 Visual Studio를 관리자 권한으로 시작해야 합니다.

    Visual Studio의 파일 메뉴에서 새로 만들기를 선택한 다음, 프로젝트를 선택합니다.

  2. 템플릿 페이지에서 다음 단계를 수행합니다.

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

    2. 프로젝트 형식으로 클라우드를 선택합니다.

    3. Azure Cloud Service를 선택합니다.

    4. 다음을 선택합니다.

      Screenshot of the New Project dialog box with Cloud selected and Azure Cloud Service Visual C# highlighted and outlined in red.

  3. 프로젝트 이름을 MultiTierApp으로 지정하고 프로젝트의 위치를 선택한 다음, 만들기를 선택합니다.

    Specify project name.

  4. 역할 페이지에서 ASP.NET 웹 역할을 두 번 클릭한 다음, 확인을 선택합니다.

    Select Web Role

  5. Azure Cloud Service 솔루션에서 WebRole1을 마우스로 가리키고 연필 아이콘을 선택한 다음, 웹 역할의 이름을 FrontendWebRole로 변경합니다. 그런 다음 확인을 선택합니다. "FrontEnd"가 아니라 소문자 "e"를 사용하여 "Frontend"를 입력해야 합니다.

    Screenshot of the New Microsoft Azure Cloud Service dialog box with the solution renamed to FrontendWebRole.

  6. 새 ASP.NET 웹 애플리케이션 만들기 대화 상자에서 MVC를 선택한 다음, 만들기를 선택합니다.

    Screenshot of the New ASP.NET Project dialog box with MVC highlighted and outlined in red and the Change Authentication option outlined in red.

  7. FrontendWebRole 프로젝트의 솔루션 탐색기에서 참조를 마우스 오른쪽 단추로 클릭한 다음, NuGet 패키지 관리를 선택합니다.

  8. 찾아보기 탭을 클릭한 다음, Azure.Messaging.ServiceBus를 검색합니다. Azure.Messaging.ServiceBus 패키지를 선택하고 설치를 클릭한 다음, 사용 약관에 동의합니다.

    Screenshot of the Manage NuGet Packages dialog box with the Azure.Messaging.ServiceBus highlighted and the Install option outlined in red.

    이제 필요한 클라이언트 어셈블리가 참조되고 몇 가지 새 코드 파일이 추가되었습니다.

  9. 동일한 단계를 수행하여 Azure.Identity NuGet 패키지를 프로젝트에 추가합니다.

  10. 솔루션 탐색기에서 FronendWebRole을 확장하고 모델을 마우스 오른쪽 단추로 클릭하고 추가를 선택한 다음, 클래스를 선택합니다. 이름 상자에 OnlineOrder.cs라는 이름을 입력합니다. 그런 다음, 추가를 선택합니다.

웹 역할에 대한 코드 작성

이 섹션에서는 애플리케이션에서 표시하는 다양한 페이지를 만듭니다.

  1. Visual Studio의 OnlineOrder.cs 파일에서 기존 네임스페이스 정의를 다음 코드로 바꿉니다.

    namespace FrontendWebRole.Models
    {
        public class OnlineOrder
        {
            public string Customer { get; set; }
            public string Product { get; set; }
        }
    }
    
  2. 솔루션 탐색기에서 Controllers\HomeController.cs를 두 번 클릭합니다. 파일 맨 위에 다음 using 문을 추가하여 Service Bus뿐만 아니라 방금 만든 모델에 대한 네임스페이스를 포함합니다.

     using FrontendWebRole.Models;
     using Azure.Messaging.ServiceBus;    
    
  3. 또한 Visual Studio의 HomeController.cs 파일에서 기존 네임스페이스 정의를 다음 코드로 바꿉니다. 이 코드에는 큐에 대한 항목 제출을 처리하는 메서드가 포함되어 있습니다.

    namespace FrontendWebRole.Controllers
    {
        public class HomeController : Controller
        {
            public ActionResult Index()
            {
                // Simply redirect to Submit, since Submit will serve as the
                // front page of this application.
                return RedirectToAction("Submit");
            }
    
            public ActionResult About()
            {
                return View();
            }
    
            // GET: /Home/Submit.
            // Controller method for a view you will create for the submission
            // form.
            public ActionResult Submit()
            {
                // Will put code for displaying queue message count here.
    
                return View();
            }
    
            // POST: /Home/Submit.
            // Controller method for handling submissions from the submission
            // form.
            [HttpPost]
            // Attribute to help prevent cross-site scripting attacks and
            // cross-site request forgery.  
            [ValidateAntiForgeryToken]
            public ActionResult Submit(OnlineOrder order)
            {
                if (ModelState.IsValid)
                {
                    // Will put code for submitting to queue here.
    
                    return RedirectToAction("Submit");
                }
                else
                {
                    return View(order);
                }
            }
        }
    }
    
  4. 빌드 메뉴에서 솔루션 빌드를 선택하여 지금까지의 작업에 대한 정확성을 테스트합니다.

  5. 이제 위에서 만든 Submit() 메서드에 대한 보기를 만듭니다. HomeController.cs 파일의 Submit() 메서드(매개 변수를 사용하지 않는 Submit()의 오버로드) 내에서 마우스 오른쪽 단추로 클릭한 다음, 보기 추가를 선택합니다.

  6. 새 스캐폴드 항목 추가 대화 상자에서 추가를 선택합니다.

  7. 보기 추가 대화 상자에서 다음 단계를 수행합니다.

    1. 템플릿 목록에서 만들기를 선택합니다.

    2. 모델 클래스 목록에서 OnlineOrder 클래스를 선택합니다.

    3. 추가를 선택합니다.

      A screenshot of the Add View dialog box with the Template and Model class drop-down lists outlined in red.

  8. 이제 애플리케이션의 표시 이름을 변경합니다. 솔루션 탐색기에서 Views\Shared\_Layout.cshtml 파일을 두 번 클릭하여 Visual Studio 편집기에서 엽니다.

  9. 내 ASP.NET 애플리케이션과 일치하는 모든 항목을 Northwind Traders 제품으로 바꿉니다.

  10. , 정보연락처 링크를 제거합니다. 강조 표시된 코드를 삭제합니다.

    Screenshot of the code with three lines of H T M L Action Link code highlighted.

  11. 마지막으로 큐에 대한 일부 정보를 포함하도록 제출 페이지를 수정합니다. 솔루션 탐색기에서 Views\Home\Submit.cshtml 파일을 두 번 클릭하여 Visual Studio 편집기에서 엽니다. <h2>Submit</h2> 뒤에 다음 줄을 추가합니다. 이제 ViewBag.MessageCount은(는) 비어 있습니다. 나중에 채웁니다.

    <p>Current number of orders in queue waiting to be processed: @ViewBag.MessageCount</p>
    
  12. 이제 UI를 구현했습니다. F5 키를 눌러 애플리케이션을 실행하고 예상대로 나타나는지 확인할 수 있습니다.

    Screenshot of the application's Submit page.

Service Bus 큐에 항목을 제출하는 코드 작성

이제 큐에 항목을 제출하는 코드를 추가합니다. 먼저 Service Bus 큐 연결 정보를 포함하는 클래스를 만듭니다. 그런 다음 Global.aspx.cs에서 연결을 초기화합니다. 끝으로, 앞에서 만든 제출 코드를 HomeController.cs에서 업데이트하여 항목을 Service Bus 큐에 실제로 제출합니다.

  1. 솔루션 탐색기에서 FrontendWebRole을 마우스 오른쪽 단추로 클릭합니다(역할이 아닌 프로젝트를 마우스 오른쪽 단추로 클릭). 추가를 선택한 다음, 클래스를 선택합니다.

  2. 클래스 이름을 QueueConnector.cs로 지정합니다. 추가를 선택하여 클래스를 만듭니다.

  3. 이제 연결 정보를 캡슐화하고 Service Bus 큐에 대한 연결을 초기화하는 코드를 추가합니다. QueueConnector.cs의 전체 내용을 다음 코드로 바꾸고 your Service Bus namespace(네임스페이스 이름) 및 yourKey의 값을 입력합니다. 이는 Azure Portal에서 이전에 가져온 기본 키입니다.

     using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Web;
     using System.Threading.Tasks;
     using Azure.Messaging.ServiceBus;
     using Azure.Messaging.ServiceBus.Administration;
    
    namespace FrontendWebRole
    {
         public static class QueueConnector
         {
             // object to send messages to a Service Bus queue
             internal static ServiceBusSender SBSender;
    
             // object to create a queue and get runtime properties (like message count) of queue
             internal static ServiceBusAdministrationClient SBAdminClient;
    
             // Fully qualified Service Bus namespace
             private const string FullyQualifiedNamespace = "<SERVICE BUS NAMESPACE NAME>.servicebus.windows.net";
    
             // The name of your queue.
             internal const string QueueName = "OrdersQueue";
    
             public static async Task Initialize()
             {
                 // Create a Service Bus client that you can use to send or receive messages
                 ServiceBusClient SBClient = new ServiceBusClient(FullyQualifiedNamespace, new DefaultAzureCredential());
    
                 // Create a Service Bus admin client to create queue if it doesn't exist or to get message count
                 SBAdminClient = new ServiceBusAdministrationClient(FullyQualifiedNamespace, new DefaultAzureCredential());
    
                 // create the OrdersQueue if it doesn't exist already
                 if (!(await SBAdminClient.QueueExistsAsync(QueueName)))
                 {
                     await SBAdminClient.CreateQueueAsync(QueueName);
                 }
    
                 // create a sender for the queue 
                 SBSender = SBClient.CreateSender(QueueName);    
             }
         }    
    }
    
  4. 이제 Initialize 메서드가 호출되는지 확인합니다. 솔루션 탐색기에서 Global.asax\Global.asax.cs를 두 번 클릭합니다.

  5. 다음 코드 줄을 Application_Start 메서드의 끝에 추가합니다.

     FrontendWebRole.QueueConnector.Initialize().Wait();
    
  6. 끝으로, 앞에서 만든 웹 코드를 업데이트하여 항목을 큐에 제출합니다. 솔루션 탐색기에서 Controllers\HomeController.cs를 두 번 클릭합니다.

  7. 다음과 같이 Submit() 메서드(매개 변수를 사용하지 않는 오버로드)를 업데이트하여 큐에 대한 메시지 수를 가져옵니다.

         public ActionResult Submit()
         {
             QueueRuntimeProperties properties = QueueConnector.adminClient.GetQueueRuntimePropertiesAsync(QueueConnector.queueName).Result;
             ViewBag.MessageCount = properties.ActiveMessageCount;
    
             return View();
         }
    
  8. 다음과 같이 Submit(OnlineOrder order) 메서드(하나의 매개 변수를 사용하는 오버로드)를 업데이트하여 큐에 주문 정보를 제출합니다.

         public ActionResult Submit(OnlineOrder order)
         {
             if (ModelState.IsValid)
             {
                 // create a message 
                 var message = new ServiceBusMessage(new BinaryData(order));
    
                 // send the message to the queue
                 QueueConnector.sbSender.SendMessageAsync(message);
    
                 return RedirectToAction("Submit");
             }
             else
             {
                 return View(order);
             }
         }
    
  9. 이제 애플리케이션을 다시 실행할 수 있습니다. 주문을 제출할 때마다 메시지 수가 증가합니다.

    Screenshot of the application's Submit page with the message count incremented to 1.

작업자 역할 만들기

이제 주문 제출을 처리하는 작업자 역할을 만듭니다. 이 예제에서는 Service Bus 큐가 있는 작업자 역할 Visual Studio 프로젝트 템플릿을 사용합니다. 포털에서 필요한 자격 증명을 이미 가져왔습니다.

  1. Visual Studio를 Azure 계정에 연결해야 합니다.

  2. Visual Studio의 솔루션 탐색기에서 MultiTierApp 프로젝트 아래의 역할 폴더를 마우스 오른쪽 단추로 클릭합니다.

  3. 추가를 선택한 다음, 새 작업자 역할 프로젝트를 선택합니다. 새 역할 프로젝트 추가 대화 상자가 나타납니다.

    Screenshot of the Solution Explorer pane with the New Worker Role Project option and Add option highlighted.

  4. 새 역할 프로젝트 추가 대화 상자에서 작업자 역할을 선택합니다. 레거시 Service Bus SDK를 사용하는 코드를 생성하므로 Service Bus 큐가 있는 작업자 역할을 선택하지 마세요.

    Screenshot of the Ad New Role Project dialog box with the Worker Role with Service Bus Queue option highlighted and outlined in red.

  5. 이름 상자에서 프로젝트 이름을 OrderProcessingRole로 지정합니다. 그런 다음, 추가를 선택합니다.

  6. 솔루션 탐색기에서 OrderProcessingRole 프로젝트를 마우스 오른쪽 단추로 클릭하고 NuGet 패키지 관리를 선택합니다.

  7. 찾아보기 탭을 클릭한 다음, Azure.Messaging.ServiceBus를 검색합니다. Azure.Messaging.ServiceBus 패키지를 선택하고 설치를 클릭한 다음, 사용 약관에 동의합니다.

    Screenshot of the Manage NuGet Packages dialog box with the Azure.Messaging.ServiceBus highlighted and the Install option outlined in red.

  8. 동일한 단계를 수행하여 Azure.Identity NuGet 패키지를 프로젝트에 추가합니다.

  9. OnlineOrder 클래스를 만들어 큐에서 처리할 때 주문을 나타냅니다. 이미 만든 클래스를 다시 사용할 수 있습니다. 솔루션 탐색기에서 OrderProcessingRole 클래스를 마우스 오른쪽 단추로 클릭합니다(역할이 아닌 클래스 아이콘을 마우스 오른쪽 단추로 클릭). 추가를 선택한 다음, 기존 항목을 선택합니다.

  10. FrontendWebRole\Models의 하위 폴더로 이동하고 OnlineOrder.cs를 두 번 클릭하여 이 프로젝트에 추가합니다.

  11. OrderProcessingRole 프로젝트의 WorkerRole.cs 파일에 다음 using 문을 추가합니다.

    using FrontendWebRole.Models;
    using Azure.Messaging.ServiceBus;
    using Azure.Messaging.ServiceBus.Administration; 
    
  12. WorkerRole.cs에서 다음 속성을 추가합니다.

    Important

    필수 구성 요소의 일부로 기록한 네임스페이스에 대한 연결 문자열을 사용합니다.

        // Fully qualified Service Bus namespace
        private const string FullyQualifiedNamespace = "<SERVICE BUS NAMESPACE NAME>.servicebus.windows.net";
    
        // The name of your queue.
        private const string QueueName = "OrdersQueue";
    
        // Service Bus Receiver object to receive messages message the specific queue
        private ServiceBusReceiver SBReceiver;
    
    
  13. OnStart 메서드를 업데이트하여 ServiceBusClient 개체를 만든 다음, OrdersQueue에서 메시지를 받을 ServiceBusReceiver 개체를 만듭니다.

        public override bool OnStart()
        {
            // Create a Service Bus client that you can use to send or receive messages
            ServiceBusClient SBClient = new ServiceBusClient(FullyQualifiedNamespace, new DefaultAzureCredential());
    
            CreateQueue(QueueName).Wait();
    
            // create a receiver that we can use to receive the message
            SBReceiver = SBClient.CreateReceiver(QueueName);
    
            return base.OnStart();
        }
        private async Task CreateQueue(string queueName)
        {
            // Create a Service Bus admin client to create queue if it doesn't exist or to get message count
            ServiceBusAdministrationClient SBAdminClient = new ServiceBusAdministrationClient(FullyQualifiedNamespace, new DefaultAzureCredential());
    
            // create the OrdersQueue if it doesn't exist already
            if (!(await SBAdminClient.QueueExistsAsync(queueName)))
            {
                await SBAdminClient.CreateQueueAsync(queueName);
            }
        }
    
  14. RunAsync 메서드를 업데이트하여 메시지를 받을 코드를 포함합니다.

        private async Task RunAsync(CancellationToken cancellationToken)
        {
            // TODO: Replace the following with your own logic.
            while (!cancellationToken.IsCancellationRequested)
            {
                // receive message from the queue
                ServiceBusReceivedMessage receivedMessage = await SBReceiver.ReceiveMessageAsync();
    
                if (receivedMessage != null)
                {
                    Trace.WriteLine("Processing", receivedMessage.SequenceNumber.ToString());
    
                    // view the message as an OnlineOrder
                    OnlineOrder order = receivedMessage.Body.ToObjectFromJson<OnlineOrder>();
                    Trace.WriteLine(order.Customer + ": " + order.Product, "ProcessingMessage");
    
                    // complete message so that it's removed from the queue
                    await SBReceiver.CompleteMessageAsync(receivedMessage);
                }
            }
        }
    
  15. 애플리케이션을 완료했습니다. 솔루션 탐색기에서 MultiTierApp 프로젝트를 마우스 오른쪽 단추로 클릭하고 시작 프로젝트로 설정을 선택한 후 F5 키를 눌러 전체 애플리케이션을 테스트할 수 있습니다. 작업자 역할에서 큐의 항목을 처리하고 완료로 표시하므로 메시지 수가 증가하지 않습니다. Azure Compute 에뮬레이터 UI를 표시하여 작업자 역할의 추적 출력을 확인할 수 있습니다. 이 작업은 작업 표시줄의 알림 영역에 있는 에뮬레이터 아이콘을 마우스 오른쪽 단추로 클릭하고 컴퓨팅 에뮬레이터 UI 표시를 선택하여 수행할 수 있습니다.

    Screenshot of what appears when you select the emulator icon. Show Compute Emulator UI is in the list of options.

    Screenshot of the Microsoft Azure Compute Emulator (Express) dialog box.

다음 단계

Service Bus에 대한 자세한 내용은 다음 리소스를 참조하십시오.