Compartir a través de


Tutorial: Comunicación de microservicios mediante la invocación del servicio Dapr

En este tutorial, hará lo siguiente:

  • Cree y ejecute localmente dos microservicios que se comunican de forma segura usando auto-mTLS y de forma fiable usando reintentos integrados a través de la API de invocación de servicios de Dapr.
  • Implemente la aplicación en Azure Container Apps a través de Azure Developer CLI con el Bicep proporcionado.

El proyecto de invocación de servicio de ejemplo incluye:

  1. Un servicio checkout que usa la funcionalidad de proxy HTTP de Dapr en un bucle para invocar una solicitud en el servicio order-processor.
  2. Un servicio order-processor que recibe la solicitud del servicio checkout.

Diagram of the Dapr service invocation services.

Requisitos previos

Ejecución de la aplicación Node.js. localmente

Antes de implementar la aplicación en Azure Container Apps, empiece por ejecutar los servicios order-processor y checkout localmente con Dapr.

Preparación del proyecto

  1. Clone la aplicación Dapr de ejemplo en el equipo local.

    git clone https://github.com/Azure-Samples/svc-invoke-dapr-nodejs.git
    
  2. Vaya al directorio raíz del ejemplo.

    cd svc-invoke-dapr-nodejs
    

Ejecución de las aplicaciones de Dapr mediante la CLI de Dapr

Para empezar, ejecute el servicio order-processor.

  1. En el directorio raíz del ejemplo, cambie los directorios a order-processor.

    cd order-processor
    
  2. Instale las dependencias.

    npm install
    
  3. Ejecute el servicio order-processor con Dapr.

    dapr run --app-port 5001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- npm start
    
  4. En una nueva ventana de terminal, desde el directorio raíz del ejemplo, vaya al servicio de autor de llamada de checkout.

    cd checkout
    
  5. Instale las dependencias.

    npm install
    
  6. Ejecute el servicio checkout con Dapr.

    dapr run  --app-id checkout --app-protocol http --dapr-http-port 3500 -- npm start
    

    Salida prevista

    En ambos terminales, el servicio de checkout está llamando órdenes al servicio de order-processor en un bucle.

    Salida de checkout:

    == APP == Order passed: {"orderId":1}
    == APP == Order passed: {"orderId":2}
    == APP == Order passed: {"orderId":3}
    == APP == Order passed: {"orderId":4}
    == APP == Order passed: {"orderId":5}
    == APP == Order passed: {"orderId":6}
    == APP == Order passed: {"orderId":7}
    == APP == Order passed: {"orderId":8}
    == APP == Order passed: {"orderId":9}
    == APP == Order passed: {"orderId":10}
    == APP == Order passed: {"orderId":11}
    == APP == Order passed: {"orderId":12}
    == APP == Order passed: {"orderId":13}
    == APP == Order passed: {"orderId":14}
    == APP == Order passed: {"orderId":15}
    == APP == Order passed: {"orderId":16}
    == APP == Order passed: {"orderId":17}
    == APP == Order passed: {"orderId":18}
    == APP == Order passed: {"orderId":19}
    == APP == Order passed: {"orderId":20}
    

    Salida de order-processor:

    == APP == Order received: { orderId: 1 }
    == APP == Order received: { orderId: 2 }
    == APP == Order received: { orderId: 3 }
    == APP == Order received: { orderId: 4 }
    == APP == Order received: { orderId: 5 }
    == APP == Order received: { orderId: 6 }
    == APP == Order received: { orderId: 7 }
    == APP == Order received: { orderId: 8 }
    == APP == Order received: { orderId: 9 }
    == APP == Order received: { orderId: 10 }
    == APP == Order received: { orderId: 11 }
    == APP == Order received: { orderId: 12 }
    == APP == Order received: { orderId: 13 }
    == APP == Order received: { orderId: 14 }
    == APP == Order received: { orderId: 15 }
    == APP == Order received: { orderId: 16 }
    == APP == Order received: { orderId: 17 }
    == APP == Order received: { orderId: 18 }
    == APP == Order received: { orderId: 19 }
    == APP == Order received: { orderId: 20 }
    
  7. Presione Cmd/Ctrl + C en ambos terminales para salir de la invocación de servicio a servicio.

Implementación de la plantilla de aplicación Dapr mediante Azure Developer CLI

Implementación de una aplicación Dapr en Azure Container Apps mediante azd.

Preparación del proyecto

En una nueva ventana de terminal, vaya al directorio raíz del ejemplo.

cd svc-invoke-dapr-nodejs

Aprovisionamiento e implementación mediante Azure Developer CLI

  1. Ejecute azd init para inicializar el proyecto.

    azd init
    
  2. Cuando se le solicite en el terminal, proporcione los parámetros siguientes.

    Parámetro Descripción
    Nombre del entorno Prefijo del grupo de recursos creado para contener todos los recursos de Azure.
    Ubicación de Azure Ubicación de Azure para los recursos.
    Suscripción de Azure La suscripción de Azure para los recursos.
  3. Ejecute azd up para aprovisionar la infraestructura e implementar la aplicación Dapr en Azure Container Apps en un solo comando.

    azd up
    

    Este proceso puede tardar un tiempo en finalizar. A medida que se completa el comando azd up, la salida de la CLI muestra dos vínculos de Azure Portal para supervisar el progreso de la implementación. La salida también muestra cómo azd up hace lo siguiente:

    • Crea y configura todos los recursos necesarios de Azure a través de los archivos de Bicep proporcionados en el directorio ./infra mediante azd provision. Una vez aprovisionados por Azure Developer CLI, puede acceder a estos recursos a través de Azure Portal. Los archivos que aprovisionan los recursos de Azure incluyen:
      • main.parameters.json
      • main.bicep
      • Un directorio de recursos de app organizado por funcionalidad
      • Biblioteca de referencia de core que contiene los módulos de Bicep usados por la plantilla de azd
    • Implementa el código mediante azd deploy

    Salida prevista

    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: Log Analytics workspace: log-analytics-name
      (✓) Done: Application Insights: app-insights-name
      (✓) Done: Portal dashboard: dashboard-name
      (✓) Done: Container Apps Environment: container-apps-env-name
      (✓) Done: Container App: ca-checkout-name
      (✓) Done: Container App: ca-order-processor-name
    
    
    Deploying services (azd deploy)
    
      (✓) Done: Deploying service api
      - Endpoint: https://ca-order-processor-name.eastus.azurecontainerapps.io/
      (✓) Done: Deploying service worker
    
    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/<your-azure-subscription>/resourceGroups/resource-group-name/overview
    

Confirmación de la implementación correcta

En Azure Portal, compruebe que el servicio checkout está pasando órdenes al servicio order-processor.

  1. Copie el nombre de la aplicación contenedora de checkout de la salida del terminal.

  2. Inicie sesión en Azure Portal y busque el recurso de aplicación contenedora por nombre.

  3. En el panel Container Apps, seleccione Supervisión>Flujo de registro.

    Screenshot of navigating to the Log stream page in the Azure portal.

  4. Confirme que el contenedor de checkout registra la misma salida que en el terminal anterior.

    Screenshot of the checkout service container's log stream in the Azure portal.

  5. Haga lo mismo para el servicio order-processor.

    Screenshot of the order processor service container's log stream in the Azure portal.

¿Qué ha ocurrido?

Tras completar correctamente el comando azd up:

  • Azure Developer CLI aprovisionó los recursos de Azure a los que se hace referencia en el directorio ./infra del proyecto de ejemplo a la suscripción de Azure que especificó. Ahora puede ver esos recursos de Azure en Azure Portal.
  • La aplicación se implementó en Azure Container Apps. Desde el portal, puede explorar la aplicación totalmente funcional.

Ejecución de las aplicaciones de Python localmente

Antes de implementar la aplicación en Azure Container Apps, empiece por ejecutar los servicios order-processor y checkout localmente con Dapr.

Preparación del proyecto

  1. Clone la aplicación Dapr de ejemplo en el equipo local.

    git clone https://github.com/Azure-Samples/svc-invoke-dapr-python.git
    
  2. Vaya al directorio raíz del ejemplo.

    cd svc-invoke-dapr-python
    

Ejecución de las aplicaciones de Dapr mediante la CLI de Dapr

Para empezar, ejecute el servicio order-processor.

  1. En el directorio raíz del ejemplo, cambie los directorios a order-processor.

    cd order-processor
    
  2. Instale las dependencias.

    pip3 install -r requirements.txt
    
  3. Ejecute el servicio order-processor con Dapr.

    dapr run --app-port 8001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- python3 app.py
    
  4. En una nueva ventana de terminal, desde el directorio raíz del ejemplo, vaya al servicio de autor de llamada de checkout.

    cd checkout
    
  5. Instale las dependencias.

    pip3 install -r requirements.txt
    
  6. Ejecute el servicio checkout con Dapr.

    dapr run  --app-id checkout --app-protocol http --dapr-http-port 3500 -- python3 app.py
    

    Salida prevista

    En ambos terminales, el servicio de checkout está llamando órdenes al servicio de order-processor en un bucle.

    Salida de checkout:

    == APP == Order passed: {"orderId":1}
    == APP == Order passed: {"orderId":2}
    == APP == Order passed: {"orderId":3}
    == APP == Order passed: {"orderId":4}
    == APP == Order passed: {"orderId":5}
    == APP == Order passed: {"orderId":6}
    == APP == Order passed: {"orderId":7}
    == APP == Order passed: {"orderId":8}
    == APP == Order passed: {"orderId":9}
    == APP == Order passed: {"orderId":10}
    == APP == Order passed: {"orderId":11}
    == APP == Order passed: {"orderId":12}
    == APP == Order passed: {"orderId":13}
    == APP == Order passed: {"orderId":14}
    == APP == Order passed: {"orderId":15}
    == APP == Order passed: {"orderId":16}
    == APP == Order passed: {"orderId":17}
    == APP == Order passed: {"orderId":18}
    == APP == Order passed: {"orderId":19}
    == APP == Order passed: {"orderId":20}
    

    Salida de order-processor:

    == APP == Order received: { orderId: 1 }
    == APP == Order received: { orderId: 2 }
    == APP == Order received: { orderId: 3 }
    == APP == Order received: { orderId: 4 }
    == APP == Order received: { orderId: 5 }
    == APP == Order received: { orderId: 6 }
    == APP == Order received: { orderId: 7 }
    == APP == Order received: { orderId: 8 }
    == APP == Order received: { orderId: 9 }
    == APP == Order received: { orderId: 10 }
    == APP == Order received: { orderId: 11 }
    == APP == Order received: { orderId: 12 }
    == APP == Order received: { orderId: 13 }
    == APP == Order received: { orderId: 14 }
    == APP == Order received: { orderId: 15 }
    == APP == Order received: { orderId: 16 }
    == APP == Order received: { orderId: 17 }
    == APP == Order received: { orderId: 18 }
    == APP == Order received: { orderId: 19 }
    == APP == Order received: { orderId: 20 }
    
  7. Presione Cmd/Ctrl + C en ambos terminales para salir de la invocación de servicio a servicio

Implementación de la plantilla de aplicación Dapr mediante Azure Developer CLI

Implementación de una aplicación Dapr en Azure Container Apps mediante azd.

Preparación del proyecto

  1. En una nueva ventana de terminal, vaya al directorio raíz del ejemplo.

    cd svc-invoke-dapr-python
    

Aprovisionamiento e implementación mediante Azure Developer CLI

  1. Ejecute azd init para inicializar el proyecto.

    azd init
    
  2. Cuando se le solicite en el terminal, proporcione los parámetros siguientes.

    Parámetro Descripción
    Nombre del entorno Prefijo del grupo de recursos creado para contener todos los recursos de Azure.
    Ubicación de Azure Ubicación de Azure para los recursos.
    Suscripción de Azure La suscripción de Azure para los recursos.
  3. Ejecute azd up para aprovisionar la infraestructura e implementar la aplicación Dapr en Azure Container Apps en un solo comando.

    azd up
    

    Este proceso puede tardar un tiempo en finalizar. A medida que se completa el comando azd up, la salida de la CLI muestra dos vínculos de Azure Portal para supervisar el progreso de la implementación. La salida también muestra cómo azd up hace lo siguiente:

    • Crea y configura todos los recursos necesarios de Azure a través de los archivos de Bicep proporcionados en el directorio ./infra mediante azd provision. Una vez aprovisionados por Azure Developer CLI, puede acceder a estos recursos a través de Azure Portal. Los archivos que aprovisionan los recursos de Azure incluyen:
      • main.parameters.json
      • main.bicep
      • Un directorio de recursos de app organizado por funcionalidad
      • Biblioteca de referencia de core que contiene los módulos de Bicep usados por la plantilla de azd
    • Implementa el código mediante azd deploy

    Salida prevista

    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: Log Analytics workspace: log-analytics-name
      (✓) Done: Application Insights: app-insights-name
      (✓) Done: Portal dashboard: dashboard-name
      (✓) Done: Container Apps Environment: container-apps-env-name
      (✓) Done: Container App: ca-checkout-name
      (✓) Done: Container App: ca-order-processor-name
    
    
    Deploying services (azd deploy)
    
      (✓) Done: Deploying service api
      - Endpoint: https://ca-order-processor-name.eastus.azurecontainerapps.io/
      (✓) Done: Deploying service worker
    
    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/<your-azure-subscription>/resourceGroups/resource-group-name/overview
    

Confirmación de la implementación correcta

En Azure Portal, compruebe que el servicio checkout está pasando órdenes al servicio order-processor.

  1. Copie el nombre de la aplicación contenedora de checkout de la salida del terminal.

  2. Inicie sesión en Azure Portal y busque el recurso de aplicación contenedora por nombre.

  3. En el panel Container Apps, seleccione Supervisión>Flujo de registro.

    Screenshot of navigating to the Log stream page in the Azure portal.

  4. Confirme que el contenedor de checkout registra la misma salida que en el terminal anterior.

    Screenshot of the checkout service container's log stream in the Azure portal.

  5. Haga lo mismo para el servicio order-processor.

    Screenshot of the order processor service container's log stream in the Azure portal.

¿Qué ha ocurrido?

Tras completar correctamente el comando azd up:

  • Azure Developer CLI aprovisionó los recursos de Azure a los que se hace referencia en el directorio ./infra del proyecto de ejemplo a la suscripción de Azure que especificó. Ahora puede ver esos recursos de Azure en Azure Portal.
  • La aplicación se implementó en Azure Container Apps. Desde el portal, puede explorar la aplicación totalmente funcional.

Ejecución local de las aplicaciones .NET

Antes de implementar la aplicación en Azure Container Apps, empiece por ejecutar los servicios order-processor y checkout localmente con Dapr.

Preparación del proyecto

  1. Clone la aplicación Dapr de ejemplo en el equipo local.

    git clone https://github.com/Azure-Samples/svc-invoke-dapr-csharp.git
    
  2. Vaya al directorio raíz del ejemplo.

    cd svc-invoke-dapr-csharp
    

Ejecución de las aplicaciones de Dapr mediante la CLI de Dapr

Comience ejecutando el servicio de destinatario de order-processor con Dapr.

  1. En el directorio raíz del ejemplo, cambie los directorios a order-processor.

    cd order-processor
    
  2. Instale las dependencias.

    dotnet build
    
  3. Ejecute el servicio order-processor con Dapr.

    dapr run --app-port 7001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- dotnet run
    
  4. En una nueva ventana de terminal, desde el directorio raíz del ejemplo, vaya al servicio de autor de llamada de checkout.

    cd checkout
    
  5. Instale las dependencias.

    dotnet build
    
  6. Ejecute el servicio checkout con Dapr.

    dapr run  --app-id checkout --app-protocol http --dapr-http-port 3500 -- dotnet run
    

    Salida prevista

    En ambos terminales, el servicio de checkout está llamando órdenes al servicio de order-processor en un bucle.

    Salida de checkout:

    == APP == Order passed: {"orderId":1}
    == APP == Order passed: {"orderId":2}
    == APP == Order passed: {"orderId":3}
    == APP == Order passed: {"orderId":4}
    == APP == Order passed: {"orderId":5}
    == APP == Order passed: {"orderId":6}
    == APP == Order passed: {"orderId":7}
    == APP == Order passed: {"orderId":8}
    == APP == Order passed: {"orderId":9}
    == APP == Order passed: {"orderId":10}
    == APP == Order passed: {"orderId":11}
    == APP == Order passed: {"orderId":12}
    == APP == Order passed: {"orderId":13}
    == APP == Order passed: {"orderId":14}
    == APP == Order passed: {"orderId":15}
    == APP == Order passed: {"orderId":16}
    == APP == Order passed: {"orderId":17}
    == APP == Order passed: {"orderId":18}
    == APP == Order passed: {"orderId":19}
    == APP == Order passed: {"orderId":20}
    

    Salida de order-processor:

    == APP == Order received: { orderId: 1 }
    == APP == Order received: { orderId: 2 }
    == APP == Order received: { orderId: 3 }
    == APP == Order received: { orderId: 4 }
    == APP == Order received: { orderId: 5 }
    == APP == Order received: { orderId: 6 }
    == APP == Order received: { orderId: 7 }
    == APP == Order received: { orderId: 8 }
    == APP == Order received: { orderId: 9 }
    == APP == Order received: { orderId: 10 }
    == APP == Order received: { orderId: 11 }
    == APP == Order received: { orderId: 12 }
    == APP == Order received: { orderId: 13 }
    == APP == Order received: { orderId: 14 }
    == APP == Order received: { orderId: 15 }
    == APP == Order received: { orderId: 16 }
    == APP == Order received: { orderId: 17 }
    == APP == Order received: { orderId: 18 }
    == APP == Order received: { orderId: 19 }
    == APP == Order received: { orderId: 20 }
    
  7. Presione Cmd/Ctrl + C en ambos terminales para salir de la invocación de servicio a servicio.

Implementación de la plantilla de aplicación Dapr mediante Azure Developer CLI

Implementación de una aplicación Dapr en Azure Container Apps mediante azd.

Preparación del proyecto

En una nueva ventana de terminal, vaya al directorio raíz del ejemplo.

cd svc-invoke-dapr-csharp

Aprovisionamiento e implementación mediante Azure Developer CLI

  1. Ejecute azd init para inicializar el proyecto.

    azd init
    
  2. Cuando se le solicite en el terminal, proporcione los parámetros siguientes.

    Parámetro Descripción
    Nombre del entorno Prefijo del grupo de recursos creado para contener todos los recursos de Azure.
    Ubicación de Azure Ubicación de Azure para los recursos.
    Suscripción de Azure La suscripción de Azure para los recursos.
  3. Ejecute azd up para aprovisionar la infraestructura e implementar la aplicación Dapr en Azure Container Apps en un solo comando.

    azd up
    

    Este proceso puede tardar un tiempo en finalizar. A medida que se completa el comando azd up, la salida de la CLI muestra dos vínculos de Azure Portal para supervisar el progreso de la implementación. La salida también muestra cómo azd up hace lo siguiente:

    • Crea y configura todos los recursos necesarios de Azure a través de los archivos de Bicep proporcionados en el directorio ./infra mediante azd provision. Una vez aprovisionados por Azure Developer CLI, puede acceder a estos recursos a través de Azure Portal. Los archivos que aprovisionan los recursos de Azure incluyen:
      • main.parameters.json
      • main.bicep
      • Un directorio de recursos de app organizado por funcionalidad
      • Biblioteca de referencia de core que contiene los módulos de Bicep usados por la plantilla de azd
    • Implementa el código mediante azd deploy

    Salida prevista

    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: Log Analytics workspace: log-analytics-name
      (✓) Done: Application Insights: app-insights-name
      (✓) Done: Portal dashboard: dashboard-name
      (✓) Done: Container Apps Environment: container-apps-env-name
      (✓) Done: Container App: ca-checkout-name
      (✓) Done: Container App: ca-order-processor-name
    
    
    Deploying services (azd deploy)
    
      (✓) Done: Deploying service api
      - Endpoint: https://ca-order-processor-name.eastus.azurecontainerapps.io/
      (✓) Done: Deploying service worker
    
    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/<your-azure-subscription>/resourceGroups/resource-group-name/overview
    

Confirmación de la implementación correcta

En Azure Portal, compruebe que el servicio checkout está pasando órdenes al servicio order-processor.

  1. Copie el nombre de la aplicación contenedora de checkout de la salida del terminal.

  2. Inicie sesión en Azure Portal y busque el recurso de aplicación contenedora por nombre.

  3. En el panel Container Apps, seleccione Supervisión>Flujo de registro.

    Screenshot of navigating to the Log stream page in the Azure portal.

  4. Confirme que el contenedor de checkout registra la misma salida que en el terminal anterior.

    Screenshot of the checkout service container's log stream in the Azure portal.

  5. Haga lo mismo para el servicio order-processor.

    Screenshot of the order processor service container's log stream in the Azure portal.

¿Qué ha ocurrido?

Tras completar correctamente el comando azd up:

  • Azure Developer CLI aprovisionó los recursos de Azure a los que se hace referencia en el directorio ./infra del proyecto de ejemplo a la suscripción de Azure que especificó. Ahora puede ver esos recursos de Azure en Azure Portal.
  • La aplicación se implementó en Azure Container Apps. Desde el portal, puede explorar la aplicación totalmente funcional.

Limpieza de recursos

Si no va a seguir usando esta aplicación, elimine los recursos de Azure que ha aprovisionado con el siguiente comando:

azd down

Pasos siguientes