Compartilhar via


Tutorial: Comunicação de microsserviços usando Publicação e Assinatura do Dapr

Neste tutorial, você criará microsserviços de editor e assinante que aproveitam a API de Pub/sub do Dapr para se comunicar usando mensagens para arquiteturas orientadas a eventos. Você vai:

  • Crie um microsserviço de publicação e um microsserviço de assinaturas que utilizem a API de publicação/assinatura do Dapr para se comunicar por meio de mensagens em arquiteturas orientadas a eventos.
  • Implante o aplicativo nos Aplicativos de Contêiner do Azure por meio do Azure Developer CLI com o Bicep fornecido.

O exemplo do projeto de publicação/assinatura inclui:

  1. Um serviço (publicador) checkout de gerador de mensagens que gera mensagens de um tópico específico.
  2. Um serviço (assinante) order-processor que escuta mensagens do serviço checkout de um tópico específico.

Diagrama do exemplo pub/sub.

Pré-requisitos

Executar os aplicativos Node.js localmente

Antes de implantar o aplicativo nos Aplicativos de Contêiner do Azure, execute os serviços order-processor e checkout localmente com o Dapr e o Barramento de Serviço do Azure.

Preparar o projeto

  1. Clone o aplicativo de exemplo no computador local.

    git clone https://github.com/Azure-Samples/pubsub-dapr-nodejs-servicebus.git
    
  2. Navegue até o diretório raiz da amostra.

    cd pubsub-dapr-nodejs-servicebus
    

Execute os aplicativos usando a CLI do Dapr

Comece executando o serviço de assinante order-processor.

  1. No diretório raiz da amostra, altere os diretórios para order-processor.

    cd order-processor
    
  2. Instale as dependências.

    npm install
    
  3. Execute o serviço 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. Em uma nova janela de terminal, no diretório raiz do exemplo, navegue até o serviço do editor checkout.

    cd checkout
    
  5. Instale as dependências.

    npm install
    
  6. Execute o serviço checkout.

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

    Saída esperada

    Em ambos os terminais, o serviço checkout publica 10 mensagens recebidas pelo serviço order-processor antes de sair.

    Saída do 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}
    

    Saída do 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. Verifique se ambos os aplicativos pararam executando os comandos a seguir. No terminal de check-out:

    dapr stop --app-id checkout
    

    No terminal do processador de pedidos:

    dapr stop --app-id order-processor
    

Implante o modelo de aplicativo usando o Azure Developer CLI

Implante o aplicativo nos Aplicativos de Contêiner do Azure usando azd.

Preparar o projeto

Em uma nova janela de terminal, navegue até o diretório raiz da amostra.

cd pubsub-dapr-nodejs-servicebus

Provisionar e implantar usando a Azure Developer CLI

  1. Execute azd init para inicializar o projeto.

    azd init
    
  2. Quando solicitado no terminal, forneça os seguintes parâmetros.

    Parâmetro Descrição
    Nome do ambiente Prefixo do grupo de recursos criado para conter todos os recursos do Azure.
    Localização do Azure O local do Azure para seus recursos.
    Assinatura do Azure A assinatura do Azure para seus recursos.
  3. Execute azd up para provisionar a infraestrutura e implantar o aplicativo nos Aplicativos de Contêiner do Azure em um único comando.

    azd up
    

    Esse processo pode levar algum tempo para ser concluído. Quando o comando azd up é concluído, a saída da CLI exibe dois links do portal do Azure para monitorar o progresso da implantação. A saída também demonstra como azd up:

    • Cria e configura todos os recursos necessários do Azure por meio dos arquivos Bicep fornecidos no diretório ./infra usando azd provision. Depois de provisionados pela Azure Developer CLI, você pode acessar esses recursos por meio do portal do Azure. Os arquivos que provisionam os recursos do Azure incluem:
      • main.parameters.json
      • main.bicep
      • Um diretório de recursos app organizado por funcionalidade
      • Uma biblioteca de referência core que contém os módulos do Bicep utilizados pelo modelo azd
    • Implanta o código usando azd deploy

    Saída esperada

    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
    

Confirmar a implantação bem-sucedida

No portal do Azure, verifique se o serviço checkout está publicando mensagens no tópico do Barramento de Serviço do Azure.

  1. Copie o nome do aplicativo de contêiner checkout da saída do terminal.

  2. Entre no portal do Azure e pesquise o recurso do aplicativo de contêiner pelo nome.

  3. No painel Aplicativos de Contêiner, selecione Monitoramento>Fluxo de logs.

    Captura de tela da navegação até a página Fluxo de log no portal do Azure.

  4. Confirme se o contêiner checkout está registrando a mesma saída do terminal anterior.

    Captura de tela do fluxo de log do contêiner de serviço de check-out no portal do Azure.

  5. Faça o mesmo com o serviço order-processor.

    Captura de tela do fluxo de log do contêiner de serviço do processador de pedidos no portal do Azure.

O que aconteceu?

Após a conclusão bem-sucedida do comando azd up:

  • A Azure Developer CLI provisionou os recursos do Azure referenciados no diretório do projeto de amostra./infra para a assinatura do Azure que você especificou. Agora você pode visualizar esses recursos do Azure por meio do portal do Azure.
  • O aplicativo implantado nos Aplicativos de Contêiner do Azure. No portal, você pode navegar até o aplicativo totalmente funcional.

Executar aplicativos Python localmente

Antes de implantar o aplicativo nos Aplicativos de Contêiner do Azure, execute os serviços order-processor e checkout localmente com o Dapr e o Barramento de Serviço do Azure.

Preparar o projeto

  1. Clone o aplicativo de exemplo no computador local.

    git clone https://github.com/Azure-Samples/pubsub-dapr-python-servicebus.git
    
  2. Navegue até o diretório raiz da amostra.

    cd pubsub-dapr-python-servicebus
    

Execute os aplicativos usando a CLI do Dapr

Comece executando o serviço de assinante order-processor.

  1. No diretório raiz da amostra, altere os diretórios para order-processor.

    cd order-processor
    
  2. Instale as dependências.

    pip3 install -r requirements.txt
    
  3. Execute o serviço order-processor.

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

  1. Em uma nova janela de terminal, no diretório raiz do exemplo, navegue até o serviço do editor checkout.

    cd checkout
    
  2. Instale as dependências.

    pip3 install -r requirements.txt
    
  3. Execute o serviço checkout.

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

Saída esperada

Em ambos os terminais, o serviço checkout publica 10 mensagens recebidas pelo serviço order-processor antes de sair.

Saída do 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}

Saída do 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. Verifique se ambos os aplicativos pararam executando os comandos a seguir. No terminal de check-out:

    dapr stop --app-id checkout
    

    No terminal do processador de pedidos:

    dapr stop --app-id order-processor
    

Implante o modelo de aplicativo usando o Azure Developer CLI

Implante o aplicativo nos Aplicativos de Contêiner do Azure usando azd.

Preparar o projeto

Em uma nova janela de terminal, navegue até o diretório raiz da amostra.

cd pubsub-dapr-python-servicebus

Provisionar e implantar usando a Azure Developer CLI

  1. Execute azd init para inicializar o projeto.

    azd init
    
  2. Quando solicitado no terminal, forneça os seguintes parâmetros.

    Parâmetro Descrição
    Nome do ambiente Prefixo do grupo de recursos criado para conter todos os recursos do Azure.
    Localização do Azure O local do Azure para seus recursos.
    Assinatura do Azure A assinatura do Azure para seus recursos.
  3. Execute azd up para provisionar a infraestrutura e implantar o aplicativo nos Aplicativos de Contêiner do Azure em um único comando.

    azd up
    

    Esse processo pode levar algum tempo para ser concluído. Quando o comando azd up é concluído, a saída da CLI exibe dois links do portal do Azure para monitorar o progresso da implantação. A saída também demonstra como azd up:

    • Cria e configura todos os recursos necessários do Azure por meio dos arquivos Bicep fornecidos no diretório ./infra usando azd provision. Depois de provisionados pela Azure Developer CLI, você pode acessar esses recursos por meio do portal do Azure. Os arquivos que provisionam os recursos do Azure incluem:
      • main.parameters.json
      • main.bicep
      • Um diretório de recursos app organizado por funcionalidade
      • Uma biblioteca de referência core que contém os módulos do Bicep utilizados pelo modelo azd
    • Implanta o código usando azd deploy

    Saída esperada

    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
    

Confirmar a implantação bem-sucedida

No portal do Azure, verifique se o serviço checkout está publicando mensagens no tópico do Barramento de Serviço do Azure.

  1. Copie o nome do aplicativo de contêiner checkout da saída do terminal.

  2. Entre no portal do Azure e pesquise o recurso do aplicativo de contêiner pelo nome.

  3. No painel Aplicativos de Contêiner, selecione Monitoramento>Fluxo de logs.

    Captura de tela da navegação até a página Fluxo de log no portal do Azure.

  4. Confirme se o contêiner checkout está registrando a mesma saída do terminal anterior.

    Captura de tela do fluxo de log do contêiner de serviço de check-out no portal do Azure.

  5. Faça o mesmo com o serviço order-processor.

    Captura de tela do fluxo de log do contêiner de serviço do processador de pedidos no portal do Azure.

O que aconteceu?

Após a conclusão bem-sucedida do comando azd up:

  • A Azure Developer CLI provisionou os recursos do Azure referenciados no diretório do projeto de amostra./infra para a assinatura do Azure que você especificou. Agora você pode visualizar esses recursos do Azure por meio do portal do Azure.
  • O aplicativo implantado nos Aplicativos de Contêiner do Azure. No portal, você pode navegar até o aplicativo totalmente funcional.

Executar aplicativos .NET localmente

Antes de implantar o aplicativo nos Aplicativos de Contêiner do Azure, execute os serviços order-processor e checkout localmente com o Dapr e o Barramento de Serviço do Azure.

Preparar o projeto

  1. Clone o aplicativo de exemplo no computador local.

    git clone https://github.com/Azure-Samples/pubsub-dapr-csharp-servicebus.git
    
  2. Navegue até o diretório raiz da amostra.

    cd pubsub-dapr-csharp-servicebus
    

Execute os aplicativos usando a CLI do Dapr

Comece executando o serviço de assinante order-processor

  1. No diretório raiz da amostra, altere os diretórios para order-processor.

    cd order-processor
    
  2. Instale as dependências.

    dotnet build
    
  3. Execute o serviço order-processor.

    dapr run --app-id order-processor --resources-path ../components/ --app-port 7001 -- dotnet run --project .
    
  4. Em uma nova janela de terminal, no diretório raiz do exemplo, navegue até o serviço do editor checkout.

    cd checkout
    
  5. Instale as dependências.

    dotnet build
    
  6. Execute o serviço checkout.

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

    Saída esperada

    Em ambos os terminais, o serviço checkout publica 10 mensagens recebidas pelo serviço order-processor antes de sair.

    Saída do 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}
    

    Saída do 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. Verifique se ambos os aplicativos pararam executando os comandos a seguir. No terminal de check-out.

    dapr stop --app-id checkout
    

    No terminal do processador de pedidos:

    dapr stop --app-id order-processor
    

Implante o modelo de aplicativo usando o Azure Developer CLI

Implante o aplicativo nos Aplicativos de Contêiner do Azure usando azd.

Preparar o projeto

Em uma nova janela de terminal, navegue até o diretório raiz da amostra.

cd pubsub-dapr-csharp-servicebus

Provisionar e implantar usando a Azure Developer CLI

  1. Execute azd init para inicializar o projeto.

    azd init
    
  2. Quando solicitado no terminal, forneça os seguintes parâmetros.

    Parâmetro Descrição
    Nome do ambiente Prefixo do grupo de recursos criado para conter todos os recursos do Azure.
    Localização do Azure O local do Azure para seus recursos.
    Assinatura do Azure A assinatura do Azure para seus recursos.
  3. Execute azd up para provisionar a infraestrutura e implantar o aplicativo nos Aplicativos de Contêiner do Azure em um único comando.

    azd up
    

    Esse processo pode levar algum tempo para ser concluído. Quando o comando azd up é concluído, a saída da CLI exibe dois links do portal do Azure para monitorar o progresso da implantação. A saída também demonstra como azd up:

    • Cria e configura todos os recursos necessários do Azure por meio dos arquivos Bicep fornecidos no diretório ./infra usando azd provision. Depois de provisionados pela Azure Developer CLI, você pode acessar esses recursos por meio do portal do Azure. Os arquivos que provisionam os recursos do Azure incluem:
      • main.parameters.json
      • main.bicep
      • Um diretório de recursos app organizado por funcionalidade
      • Uma biblioteca de referência core que contém os módulos do Bicep utilizados pelo modelo azd
    • Implanta o código usando azd deploy

    Saída esperada

    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
    

Confirmar a implantação bem-sucedida

No portal do Azure, verifique se o serviço checkout está publicando mensagens no tópico do Barramento de Serviço do Azure.

  1. Copie o nome do aplicativo de contêiner checkout da saída do terminal.

  2. Entre no portal do Azure e pesquise o recurso do aplicativo de contêiner pelo nome.

  3. No painel Aplicativos de Contêiner, selecione Monitoramento>Fluxo de logs.

    Captura de tela da navegação até a página Fluxo de log no portal do Azure.

  4. Confirme se o contêiner checkout está registrando a mesma saída do terminal anterior.

    Captura de tela do fluxo de log do contêiner de serviço de check-out no portal do Azure.

  5. Faça o mesmo com o serviço order-processor.

    Captura de tela do fluxo de log do contêiner de serviço do processador de pedidos no portal do Azure.

O que aconteceu?

Após a conclusão bem-sucedida do comando azd up:

  • A Azure Developer CLI provisionou os recursos do Azure referenciados no diretório do projeto de amostra./infra para a assinatura do Azure que você especificou. Agora você pode visualizar esses recursos do Azure por meio do portal do Azure.
  • O aplicativo implantado nos Aplicativos de Contêiner do Azure. No portal, você pode navegar até o aplicativo totalmente funcional.

Limpar os recursos

Se você não quiser continuar a usar esse aplicativo, exclua os recursos do Azure que você provisionou com o seguinte comando:

azd down

Próximas etapas