Tutorial: Comunicación de microservicios mediante la invocación del servicio Dapr
En este tutorial, creará y ejecutará dos microservicios que se comunican de forma segura mediante mTLS automático y de forma confiable mediante reintentos integrados a través de la API de invocación de servicios de Dapr. Hará lo siguiente:
- Ejecutar la aplicación localmente.
- 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:
- Un servicio
checkout
que usa un proxy HTTP en un bucle para invocar una solicitud en el servicioorder-processor
. - Un servicio
order-processor
que recibe la solicitud del serviciocheckout
.
Requisitos previos
- Instalar Azure Developer CLI
- Instalar e inicializar Dapr
- Docker Desktop
- Instalar Git
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
Clone la aplicación de ejemplo en la máquina local.
git clone https://github.com/Azure-Samples/svc-invoke-dapr-nodejs.git
Vaya al directorio raíz del ejemplo.
cd svc-invoke-dapr-nodejs
Ejecute las aplicaciones mediante la CLI de Dapr
Para empezar, ejecute el servicio order-processor
.
En el directorio raíz del ejemplo, cambie los directorios a
order-processor
.cd order-processor
Instale las dependencias.
npm install
Ejecute el servicio
order-processor
.dapr run --app-port 5001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- npm start
En una nueva ventana de terminal, desde el directorio raíz del ejemplo, vaya al servicio de autor de llamada de
checkout
.cd checkout
Instale las dependencias.
npm install
Ejecute el servicio
checkout
.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 deorder-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 }
Presione Cmd/Ctrl + C en ambos terminales para salir de la invocación de servicio a servicio.
Implemente la plantilla de aplicación mediante Azure Developer CLI
Implemente la aplicación 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
Ejecute
azd init
para inicializar el proyecto.azd init
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. Ejecute
azd up
para aprovisionar la infraestructura e implementar la aplicación en Azure Container Apps con 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ómoazd 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
medianteazd 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 deazd
- 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
- Crea y configura todos los recursos necesarios de Azure a través de los archivos de Bicep proporcionados en el directorio
Confirmación de la implementación correcta
En Azure Portal, compruebe que el servicio checkout
está pasando órdenes al servicio order-processor
.
Copie el nombre de la aplicación contenedora de
checkout
de la salida del terminal.Inicie sesión en Azure Portal y busque el recurso de aplicación contenedora por nombre.
En el panel Container Apps, seleccione Supervisión>Flujo de registro.
Confirme que el contenedor de
checkout
registra la misma salida que en el terminal anterior.Haga lo mismo para el servicio
order-processor
.
¿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
Clone la aplicación de ejemplo en la máquina local.
git clone https://github.com/Azure-Samples/svc-invoke-dapr-python.git
Vaya al directorio raíz del ejemplo.
cd svc-invoke-dapr-python
Ejecute las aplicaciones mediante la CLI de Dapr
Para empezar, ejecute el servicio order-processor
.
En el directorio raíz del ejemplo, cambie los directorios a
order-processor
.cd order-processor
Instale las dependencias.
pip3 install -r requirements.txt
Ejecute el servicio
order-processor
.dapr run --app-port 8001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- python3 app.py
En una nueva ventana de terminal, desde el directorio raíz del ejemplo, vaya al servicio de autor de llamada de
checkout
.cd checkout
Instale las dependencias.
pip3 install -r requirements.txt
Ejecute el servicio
checkout
.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 deorder-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 }
Presione Cmd/Ctrl + C en ambos terminales para salir de la invocación de servicio a servicio
Implemente la plantilla de aplicación mediante Azure Developer CLI
Implemente la aplicación 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-python
Aprovisionamiento e implementación mediante Azure Developer CLI
Ejecute
azd init
para inicializar el proyecto.azd init
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. Ejecute
azd up
para aprovisionar la infraestructura e implementar la aplicación en Azure Container Apps con 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ómoazd 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
medianteazd 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 deazd
- 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
- Crea y configura todos los recursos necesarios de Azure a través de los archivos de Bicep proporcionados en el directorio
Confirmación de la implementación correcta
En Azure Portal, compruebe que el servicio checkout
está pasando órdenes al servicio order-processor
.
Copie el nombre de la aplicación contenedora de
checkout
de la salida del terminal.Inicie sesión en Azure Portal y busque el recurso de aplicación contenedora por nombre.
En el panel Container Apps, seleccione Supervisión>Flujo de registro.
Confirme que el contenedor de
checkout
registra la misma salida que en el terminal anterior.Haga lo mismo para el servicio
order-processor
.
¿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
Clone la aplicación de ejemplo en la máquina local.
git clone https://github.com/Azure-Samples/svc-invoke-dapr-csharp.git
Vaya al directorio raíz del ejemplo.
cd svc-invoke-dapr-csharp
Ejecute las aplicaciones mediante la CLI de Dapr
Comience ejecutando el servicio de destinatario de order-processor
.
En el directorio raíz del ejemplo, cambie los directorios a
order-processor
.cd order-processor
Instale las dependencias.
dotnet build
Ejecute el servicio
order-processor
.dapr run --app-port 7001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- dotnet run
En una nueva ventana de terminal, desde el directorio raíz del ejemplo, vaya al servicio de autor de llamada de
checkout
.cd checkout
Instale las dependencias.
dotnet build
Ejecute el servicio
checkout
.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 deorder-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 }
Presione Cmd/Ctrl + C en ambos terminales para salir de la invocación de servicio a servicio.
Implemente la plantilla de aplicación mediante Azure Developer CLI
Implemente la aplicación 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
Ejecute
azd init
para inicializar el proyecto.azd init
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. Ejecute
azd up
para aprovisionar la infraestructura e implementar la aplicación en Azure Container Apps con 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ómoazd 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
medianteazd 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 deazd
- 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
- Crea y configura todos los recursos necesarios de Azure a través de los archivos de Bicep proporcionados en el directorio
Confirmación de la implementación correcta
En Azure Portal, compruebe que el servicio checkout
está pasando órdenes al servicio order-processor
.
Copie el nombre de la aplicación contenedora de
checkout
de la salida del terminal.Inicie sesión en Azure Portal y busque el recurso de aplicación contenedora por nombre.
En el panel Container Apps, seleccione Supervisión>Flujo de registro.
Confirme que el contenedor de
checkout
registra la misma salida que en el terminal anterior.Haga lo mismo para el servicio
order-processor
.
¿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
- Obtenga más información sobre la Implementación de aplicaciones Dapr en Azure Container Apps.
- Habilitar la autenticación mediante tokens para solicitudes de Dapr.
- Obtenga más información sobre Azure Developer CLI y Cómo hacer que sus aplicaciones sean compatibles con
azd
.