다음을 통해 공유


자습서: Dapr 게시 및 구독을 사용한 마이크로 서비스 통신

이 자습서에서는 이벤트 기반 아키텍처를 위한 메시지를 사용하여 통신하기 위해 Dapr Pub/sub API를 활용하는 게시자 및 구독자 마이크로 서비스를 만듭니다. 다음 작업을 수행합니다.

  • Dapr pub/sub API를 활용하여 이벤트 기반 아키텍처에 대한 메시지를 통해 통신하는 게시자 마이크로 서비스 및 구독자 마이크로 서비스를 만듭니다.
  • 제공된 Bicep을 사용하여 Azure Developer CLI를 통해 애플리케이션을 Azure Container Apps에 배포합니다.

샘플 pub/sub 프로젝트에 포함되는 항목은 다음과 같습니다.

  1. 특정 항목의 메시지를 생성하는 메시지 생성기 checkout 서비스(게시자).
  2. 특정 항목의 checkout 서비스에서 메시지를 수신 대기하는 order-processor 서비스(구독자).

Pub/Sub 샘플의 다이어그램.

필수 조건

로컬로 Node.js 애플리케이션 실행

애플리케이션을 Azure Container Apps에 배포하기 전에 Dapr 및 Azure Service Bus를 사용하여 order-processorcheckout 서비스를 로컬로 실행합니다.

프로젝트 준비

  1. 샘플 애플리케이션을 로컬 컴퓨터에 복제합니다.

    git clone https://github.com/Azure-Samples/pubsub-dapr-nodejs-servicebus.git
    
  2. 샘플의 루트 디렉터리로 이동합니다.

    cd pubsub-dapr-nodejs-servicebus
    

Dapr CLI를 사용하여 애플리케이션 실행

order-processor 구독자 서비스를 실행하여 시작합니다.

  1. 샘플의 루트 디렉터리에서 디렉터리를 order-processor로 변경합니다.

    cd order-processor
    
  2. 종속성을 설치합니다.

    npm install
    
  3. order-processor 서비스를 실행합니다.

    dapr run --app-port 5001 --app-id order-processing --app-protocol http --dapr-http-port 3501 --resources-path ../components -- npm run start
    
  4. 새 터미널 창에 있는 샘플의 루트 디렉터리에서 checkout 게시자 서비스로 이동합니다.

    cd checkout
    
  5. 종속성을 설치합니다.

    npm install
    
  6. checkout 서비스를 실행합니다.

    dapr run --app-id checkout --app-protocol http --resources-path ../components -- npm run start
    

    예상 출력

    두 터미널 모두에서 checkout 서비스는 종료하기 전에 order-processor 서비스에서 받은 10개의 메시지를 게시합니다.

    checkout 출력:

    == APP == Published data: {"orderId":1}
    == APP == Published data: {"orderId":2}
    == APP == Published data: {"orderId":3}
    == APP == Published data: {"orderId":4}
    == APP == Published data: {"orderId":5}
    == APP == Published data: {"orderId":6}
    == APP == Published data: {"orderId":7}
    == APP == Published data: {"orderId":8}
    == APP == Published data: {"orderId":9}
    == APP == Published data: {"orderId":10}
    

    order-processor 출력:

    == APP == Subscriber received: {"orderId":1}
    == APP == Subscriber received: {"orderId":2}
    == APP == Subscriber received: {"orderId":3}
    == APP == Subscriber received: {"orderId":4}
    == APP == Subscriber received: {"orderId":5}
    == APP == Subscriber received: {"orderId":6}
    == APP == Subscriber received: {"orderId":7}
    == APP == Subscriber received: {"orderId":8}
    == APP == Subscriber received: {"orderId":9}
    == APP == Subscriber received: {"orderId":10}
    
  7. 다음 명령을 실행하여 두 애플리케이션이 모두 중지되었는지 확인합니다. 체크 아웃 터미널에서:

    dapr stop --app-id checkout
    

    주문 프로세서 터미널에서:

    dapr stop --app-id order-processor
    

Azure Developer CLI를 사용하여 애플리케이션 템플릿 배포

azd를 사용하여 Azure Container Apps에 애플리케이션을 배포합니다.

프로젝트 준비

새 터미널 창에서 샘플의 루트 디렉터리로 이동합니다.

cd pubsub-dapr-nodejs-servicebus

Azure Developer CLI를 사용하여 프로비전 및 배포

  1. azd init를 실행하여 프로젝트를 초기화합니다.

    azd init
    
  2. 터미널에서 메시지가 표시되면 다음 매개 변수를 제공합니다.

    매개 변수 설명
    환경 이름 모든 Azure 리소스를 보유하기 위해 만든 리소스 그룹의 접두사입니다.
    Azure 위치 리소스에 대한 Azure 위치입니다.
    Azure 구독 리소스에 대한 Azure 구독입니다.
  3. azd up을 실행하여 단일 명령으로 인프라를 프로비전하고 애플리케이션을 Azure Container Apps에 배포합니다.

    azd up
    

    이 프로세스를 완료하는 데 약간의 시간이 걸릴 수 있습니다. azd up 명령이 완료되면 배포 진행률을 모니터링하기 위한 두 개의 Azure Portal 링크가 CLI 출력에 표시됩니다. 또한 출력에는 azd up을 실행하는 방법도 표시됩니다.

    • azd provision을 사용하여 ./infra 디렉터리에 제공된 Bicep 파일을 통해 필요한 모든 Azure 리소스를 만들고 구성합니다. Azure Developer CLI에서 프로비전되면 Azure Portal을 통해 이러한 리소스에 액세스할 수 있습니다. Azure 리소스를 프로비전하는 파일에 포함되는 항목은 다음과 같습니다.
      • main.parameters.json
      • main.bicep
      • 기능별로 구성된 app 리소스 디렉터리
      • azd 템플릿에서 사용하는 Bicep 모듈이 포함된 core 참조 라이브러리
    • azd deploy를 사용하여 코드를 배포합니다.

    예상 출력

    Initializing a new project (azd init)
    
    
    Provisioning Azure resources (azd provision)
    Provisioning Azure resources can take some time
    
      You can view detailed progress in the Azure Portal:
      https://portal.azure.com
    
      (✓) Done: Resource group: resource-group-name
      (✓) Done: Application Insights: app-insights-name
      (✓) Done: Portal dashboard: portal-dashboard-name
      (✓) Done: Log Analytics workspace: log-analytics-name
      (✓) Done: Key vault: key-vault-name
      (✓) Done: Container Apps Environment: ca-env-name
      (✓) Done: Container App: ca-checkout-name
      (✓) Done: Container App: ca-orders-name
    
    
    Deploying services (azd deploy)
    
      (✓) Done: Deploying service checkout
      (✓) Done: Deploying service orders
      - Endpoint: https://ca-orders-name.endpoint.region.azurecontainerapps.io/
    
    SUCCESS: Your Azure app has been deployed!
    You can view the resources created under the resource group resource-group-name in Azure Portal:
    https://portal.azure.com/#@/resource/subscriptions/subscription-id/resourceGroups/resource-group-name/overview
    

성공적인 배포 확인

Azure Portal에서 checkout 서비스가 메시지를 Azure Service Bus 토픽에 게시하고 있는지 확인합니다.

  1. 터미널 출력에서 checkout 컨테이너 앱 이름을 복사합니다.

  2. Azure Portal에 로그인하고 이름으로 컨테이너 앱 리소스를 검색합니다.

  3. Container Apps 대시보드에서 모니터링>로그 스트림을 차례로 선택합니다.

    Azure Portal에서 로그 스트림 페이지로 이동하는 스크린샷.

  4. checkout 컨테이너에서 이전 터미널에서와 동일한 출력을 로깅하는지 확인합니다.

    Azure Portal의 체크 아웃 서비스 컨테이너 로그 스트림에 대한 스크린샷.

  5. order-processor 서비스에 대해 동일한 작업을 수행합니다.

    Azure Portal에 있는 주문 프로세서 서비스 컨테이너의 로그 스트림에 대한 스크린샷.

무슨 일이 일어났나요?

azd up 명령이 성공적으로 완료되면 다음과 같습니다.

  • Azure Developer CLI에서 샘플 프로젝트의 ./infra디렉터리에서 참조하는 Azure 리소스를 지정한 Azure 구독에 프로비전했습니다. 이제 Azure Portal을 통해 해당 Azure 리소스를 볼 수 있습니다.
  • 앱이 Azure Container Apps에 배포되었습니다. 포털에서 완전한 기능의 앱을 찾아볼 수 있습니다.

로컬로 Python 애플리케이션 실행

애플리케이션을 Azure Container Apps에 배포하기 전에 Dapr 및 Azure Service Bus를 사용하여 order-processorcheckout 서비스를 로컬로 실행합니다.

프로젝트 준비

  1. 샘플 애플리케이션을 로컬 컴퓨터에 복제합니다.

    git clone https://github.com/Azure-Samples/pubsub-dapr-python-servicebus.git
    
  2. 샘플의 루트 디렉터리로 이동합니다.

    cd pubsub-dapr-python-servicebus
    

Dapr CLI를 사용하여 애플리케이션 실행

order-processor 구독자 서비스를 실행하여 시작합니다.

  1. 샘플의 루트 디렉터리에서 디렉터리를 order-processor로 변경합니다.

    cd order-processor
    
  2. 종속성을 설치합니다.

    pip3 install -r requirements.txt
    
  3. order-processor 서비스를 실행합니다.

    dapr run --app-id order-processor --resources-path ../components/ --app-port 5001 -- python app.py
    

  1. 새 터미널 창에 있는 샘플의 루트 디렉터리에서 checkout 게시자 서비스로 이동합니다.

    cd checkout
    
  2. 종속성을 설치합니다.

    pip3 install -r requirements.txt
    
  3. checkout 서비스를 실행합니다.

    dapr run --app-id checkout --resources-path ../components/ -- python app.py
    

예상 출력

두 터미널 모두에서 checkout 서비스는 종료하기 전에 order-processor 서비스에서 받은 10개의 메시지를 게시합니다.

checkout 출력:

== APP == Published data: {"orderId":1}
== APP == Published data: {"orderId":2}
== APP == Published data: {"orderId":3}
== APP == Published data: {"orderId":4}
== APP == Published data: {"orderId":5}
== APP == Published data: {"orderId":6}
== APP == Published data: {"orderId":7}
== APP == Published data: {"orderId":8}
== APP == Published data: {"orderId":9}
== APP == Published data: {"orderId":10}

order-processor 출력:

== APP == Subscriber received: {"orderId":1}
== APP == Subscriber received: {"orderId":2}
== APP == Subscriber received: {"orderId":3}
== APP == Subscriber received: {"orderId":4}
== APP == Subscriber received: {"orderId":5}
== APP == Subscriber received: {"orderId":6}
== APP == Subscriber received: {"orderId":7}
== APP == Subscriber received: {"orderId":8}
== APP == Subscriber received: {"orderId":9}
== APP == Subscriber received: {"orderId":10}
  1. 다음 명령을 실행하여 두 애플리케이션이 모두 중지되었는지 확인합니다. 체크 아웃 터미널에서:

    dapr stop --app-id checkout
    

    주문 프로세서 터미널에서:

    dapr stop --app-id order-processor
    

Azure Developer CLI를 사용하여 애플리케이션 템플릿 배포

azd를 사용하여 Azure Container Apps에 애플리케이션을 배포합니다.

프로젝트 준비

새 터미널 창에서 샘플의 루트 디렉터리로 이동합니다.

cd pubsub-dapr-python-servicebus

Azure Developer CLI를 사용하여 프로비전 및 배포

  1. azd init를 실행하여 프로젝트를 초기화합니다.

    azd init
    
  2. 터미널에서 메시지가 표시되면 다음 매개 변수를 제공합니다.

    매개 변수 설명
    환경 이름 모든 Azure 리소스를 보유하기 위해 만든 리소스 그룹의 접두사입니다.
    Azure 위치 리소스에 대한 Azure 위치입니다.
    Azure 구독 리소스에 대한 Azure 구독입니다.
  3. azd up을 실행하여 단일 명령으로 인프라를 프로비전하고 애플리케이션을 Azure Container Apps에 배포합니다.

    azd up
    

    이 프로세스를 완료하는 데 약간의 시간이 걸릴 수 있습니다. azd up 명령이 완료되면 배포 진행률을 모니터링하기 위한 두 개의 Azure Portal 링크가 CLI 출력에 표시됩니다. 또한 출력에는 azd up을 실행하는 방법도 표시됩니다.

    • azd provision을 사용하여 ./infra 디렉터리에 제공된 Bicep 파일을 통해 필요한 모든 Azure 리소스를 만들고 구성합니다. Azure Developer CLI에서 프로비전되면 Azure Portal을 통해 이러한 리소스에 액세스할 수 있습니다. Azure 리소스를 프로비전하는 파일에 포함되는 항목은 다음과 같습니다.
      • main.parameters.json
      • main.bicep
      • 기능별로 구성된 app 리소스 디렉터리
      • azd 템플릿에서 사용하는 Bicep 모듈이 포함된 core 참조 라이브러리
    • azd deploy를 사용하여 코드를 배포합니다.

    예상 출력

    Initializing a new project (azd init)
    
    
    Provisioning Azure resources (azd provision)
    Provisioning Azure resources can take some time
    
      You can view detailed progress in the Azure Portal:
      https://portal.azure.com
    
      (✓) Done: Resource group: resource-group-name
      (✓) Done: Application Insights: app-insights-name
      (✓) Done: Portal dashboard: portal-dashboard-name
      (✓) Done: Log Analytics workspace: log-analytics-name
      (✓) Done: Key vault: key-vault-name
      (✓) Done: Container Apps Environment: ca-env-name
      (✓) Done: Container App: ca-checkout-name
      (✓) Done: Container App: ca-orders-name
    
    
    Deploying services (azd deploy)
    
      (✓) Done: Deploying service checkout
      (✓) Done: Deploying service orders
      - Endpoint: https://ca-orders-name.endpoint.region.azurecontainerapps.io/
    
    SUCCESS: Your Azure app has been deployed!
    You can view the resources created under the resource group resource-group-name in Azure Portal:
    https://portal.azure.com/#@/resource/subscriptions/subscription-id/resourceGroups/resource-group-name/overview
    

성공적인 배포 확인

Azure Portal에서 checkout 서비스가 메시지를 Azure Service Bus 토픽에 게시하고 있는지 확인합니다.

  1. 터미널 출력에서 checkout 컨테이너 앱 이름을 복사합니다.

  2. Azure Portal에 로그인하고 이름으로 컨테이너 앱 리소스를 검색합니다.

  3. Container Apps 대시보드에서 모니터링>로그 스트림을 차례로 선택합니다.

    Azure Portal에서 로그 스트림 페이지로 이동하는 스크린샷.

  4. checkout 컨테이너에서 이전 터미널에서와 동일한 출력을 로깅하는지 확인합니다.

    Azure Portal의 체크 아웃 서비스 컨테이너 로그 스트림에 대한 스크린샷.

  5. order-processor 서비스에 대해 동일한 작업을 수행합니다.

    Azure Portal에 있는 주문 프로세서 서비스 컨테이너의 로그 스트림에 대한 스크린샷.

무슨 일이 일어났나요?

azd up 명령이 성공적으로 완료되면 다음과 같습니다.

  • Azure Developer CLI에서 샘플 프로젝트의 ./infra디렉터리에서 참조하는 Azure 리소스를 지정한 Azure 구독에 프로비전했습니다. 이제 Azure Portal을 통해 해당 Azure 리소스를 볼 수 있습니다.
  • 앱이 Azure Container Apps에 배포되었습니다. 포털에서 완전한 기능의 앱을 찾아볼 수 있습니다.

로컬로 .NET 애플리케이션 실행

애플리케이션을 Azure Container Apps에 배포하기 전에 Dapr 및 Azure Service Bus를 사용하여 order-processorcheckout 서비스를 로컬로 실행합니다.

프로젝트 준비

  1. 샘플 애플리케이션을 로컬 컴퓨터에 복제합니다.

    git clone https://github.com/Azure-Samples/pubsub-dapr-csharp-servicebus.git
    
  2. 샘플의 루트 디렉터리로 이동합니다.

    cd pubsub-dapr-csharp-servicebus
    

Dapr CLI를 사용하여 애플리케이션 실행

order-processor 구독자 서비스를 실행하여 시작

  1. 샘플의 루트 디렉터리에서 디렉터리를 order-processor로 변경합니다.

    cd order-processor
    
  2. 종속성을 설치합니다.

    dotnet build
    
  3. order-processor 서비스를 실행합니다.

    dapr run --app-id order-processor --resources-path ../components/ --app-port 7001 -- dotnet run --project .
    
  4. 새 터미널 창에 있는 샘플의 루트 디렉터리에서 checkout 게시자 서비스로 이동합니다.

    cd checkout
    
  5. 종속성을 설치합니다.

    dotnet build
    
  6. checkout 서비스를 실행합니다.

    dapr run --app-id checkout --resources-path ../components/ -- dotnet run --project .
    

    예상 출력

    두 터미널 모두에서 checkout 서비스는 종료하기 전에 order-processor 서비스에서 받은 10개의 메시지를 게시합니다.

    checkout 출력:

    == APP == Published data: {"orderId":1}
    == APP == Published data: {"orderId":2}
    == APP == Published data: {"orderId":3}
    == APP == Published data: {"orderId":4}
    == APP == Published data: {"orderId":5}
    == APP == Published data: {"orderId":6}
    == APP == Published data: {"orderId":7}
    == APP == Published data: {"orderId":8}
    == APP == Published data: {"orderId":9}
    == APP == Published data: {"orderId":10}
    

    order-processor 출력:

    == APP == Subscriber received: {"orderId":1}
    == APP == Subscriber received: {"orderId":2}
    == APP == Subscriber received: {"orderId":3}
    == APP == Subscriber received: {"orderId":4}
    == APP == Subscriber received: {"orderId":5}
    == APP == Subscriber received: {"orderId":6}
    == APP == Subscriber received: {"orderId":7}
    == APP == Subscriber received: {"orderId":8}
    == APP == Subscriber received: {"orderId":9}
    == APP == Subscriber received: {"orderId":10}
    
  7. 다음 명령을 실행하여 두 애플리케이션이 모두 중지되었는지 확인합니다. 체크 아웃 터미널에서:

    dapr stop --app-id checkout
    

    주문 프로세서 터미널에서:

    dapr stop --app-id order-processor
    

Azure Developer CLI를 사용하여 애플리케이션 템플릿 배포

azd를 사용하여 Azure Container Apps에 애플리케이션을 배포합니다.

프로젝트 준비

새 터미널 창에서 샘플의 루트 디렉터리로 이동합니다.

cd pubsub-dapr-csharp-servicebus

Azure Developer CLI를 사용하여 프로비전 및 배포

  1. azd init를 실행하여 프로젝트를 초기화합니다.

    azd init
    
  2. 터미널에서 메시지가 표시되면 다음 매개 변수를 제공합니다.

    매개 변수 설명
    환경 이름 모든 Azure 리소스를 보유하기 위해 만든 리소스 그룹의 접두사입니다.
    Azure 위치 리소스에 대한 Azure 위치입니다.
    Azure 구독 리소스에 대한 Azure 구독입니다.
  3. azd up을 실행하여 단일 명령으로 인프라를 프로비전하고 애플리케이션을 Azure Container Apps에 배포합니다.

    azd up
    

    이 프로세스를 완료하는 데 약간의 시간이 걸릴 수 있습니다. azd up 명령이 완료되면 배포 진행률을 모니터링하기 위한 두 개의 Azure Portal 링크가 CLI 출력에 표시됩니다. 또한 출력에는 azd up을 실행하는 방법도 표시됩니다.

    • azd provision을 사용하여 ./infra 디렉터리에 제공된 Bicep 파일을 통해 필요한 모든 Azure 리소스를 만들고 구성합니다. Azure Developer CLI에서 프로비전되면 Azure Portal을 통해 이러한 리소스에 액세스할 수 있습니다. Azure 리소스를 프로비전하는 파일에 포함되는 항목은 다음과 같습니다.
      • main.parameters.json
      • main.bicep
      • 기능별로 구성된 app 리소스 디렉터리
      • azd 템플릿에서 사용하는 Bicep 모듈이 포함된 core 참조 라이브러리
    • azd deploy를 사용하여 코드를 배포합니다.

    예상 출력

    Initializing a new project (azd init)
    
    
    Provisioning Azure resources (azd provision)
    Provisioning Azure resources can take some time
    
      You can view detailed progress in the Azure Portal:
      https://portal.azure.com
    
      (✓) Done: Resource group: resource-group-name
      (✓) Done: Application Insights: app-insights-name
      (✓) Done: Portal dashboard: portal-dashboard-name
      (✓) Done: Log Analytics workspace: log-analytics-name
      (✓) Done: Key vault: key-vault-name
      (✓) Done: Container Apps Environment: ca-env-name
      (✓) Done: Container App: ca-checkout-name
      (✓) Done: Container App: ca-orders-name
    
    
    Deploying services (azd deploy)
    
      (✓) Done: Deploying service checkout
      (✓) Done: Deploying service orders
      - Endpoint: https://ca-orders-name.endpoint.region.azurecontainerapps.io/
    
    SUCCESS: Your Azure app has been deployed!
    You can view the resources created under the resource group resource-group-name in Azure Portal:
    https://portal.azure.com/#@/resource/subscriptions/subscription-id/resourceGroups/resource-group-name/overview
    

성공적인 배포 확인

Azure Portal에서 checkout 서비스가 메시지를 Azure Service Bus 토픽에 게시하고 있는지 확인합니다.

  1. 터미널 출력에서 checkout 컨테이너 앱 이름을 복사합니다.

  2. Azure Portal에 로그인하고 이름으로 컨테이너 앱 리소스를 검색합니다.

  3. Container Apps 대시보드에서 모니터링>로그 스트림을 차례로 선택합니다.

    Azure Portal에서 로그 스트림 페이지로 이동하는 스크린샷.

  4. checkout 컨테이너에서 이전 터미널에서와 동일한 출력을 로깅하는지 확인합니다.

    Azure Portal의 체크 아웃 서비스 컨테이너 로그 스트림에 대한 스크린샷.

  5. order-processor 서비스에 대해 동일한 작업을 수행합니다.

    Azure Portal에 있는 주문 프로세서 서비스 컨테이너의 로그 스트림에 대한 스크린샷.

무슨 일이 일어났나요?

azd up 명령이 성공적으로 완료되면 다음과 같습니다.

  • Azure Developer CLI에서 샘플 프로젝트의 ./infra디렉터리에서 참조하는 Azure 리소스를 지정한 Azure 구독에 프로비전했습니다. 이제 Azure Portal을 통해 해당 Azure 리소스를 볼 수 있습니다.
  • 앱이 Azure Container Apps에 배포되었습니다. 포털에서 완전한 기능의 앱을 찾아볼 수 있습니다.

리소스 정리

이 애플리케이션을 계속 사용하지 않으려면 다음 명령을 사용하여 프로비전한 Azure 리소스를 삭제합니다.

azd down

다음 단계