Compartir a través de


Tutorial: Comunicación de microservicios mediante la publicación y suscripción de Dapr

En este tutorial, creará microservicios de publicador y suscriptor que aprovechan laAPI Pub/Sub de Dapr para comunicarse mediante mensajes en arquitecturas controladas por eventos. Hará lo siguiente:

  • Cree un microservicio de publicador y un microservicio de suscriptor que aprovechen la API de pub/sub de Dapr para comunicarse mediante mensajes para arquitecturas controladas por eventos.
  • Implemente la aplicación en Azure Container Apps a través de Azure Developer CLI con Bicep proporcionado.

El proyecto de pub/sub de ejemplo incluye:

  1. Un servicio generador de mensajes (publicador) checkout que genera mensajes de un tema específico.
  2. Un servicio (suscriptor) order-processor que escucha mensajes del servicio checkout de un tema específico.

Diagrama del ejemplo Pub/Sub.

Requisitos previos

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

Antes de implementar la aplicación en Azure Container Apps, ejecute los servicios order-processor y checkout localmente con Dapr y Azure Service Bus.

Preparación del proyecto

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

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

    cd pubsub-dapr-nodejs-servicebus
    

Ejecute las aplicaciones mediante la CLI de Dapr

Comience ejecutando el servicio de suscriptor 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.

    dapr run --app-port 5001 --app-id order-processing --app-protocol http --dapr-http-port 3501 --resources-path ../components -- npm run start
    
  4. En una nueva ventana de terminal, desde el directorio raíz del ejemplo, vaya al servicio de publicador de checkout.

    cd checkout
    
  5. Instale las dependencias.

    npm install
    
  6. Ejecute el servicio checkout.

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

    Salida prevista

    En ambos terminales, el servicio checkout publica 10 mensajes recibidos por el servicio order-processor antes de salir.

    Salida de 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}
    

    Salida de 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. Asegúrese de que ambas aplicaciones se han detenido mediante la ejecución de los siguientes comandos. En el terminal de extracción:

    dapr stop --app-id checkout
    

    En el terminal de procesador de pedidos:

    dapr stop --app-id order-processor
    

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 pubsub-dapr-nodejs-servicebus

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 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ó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: 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
    

Confirmación de la implementación correcta

En Azure Portal, compruebe que el servicio checkout está publicando mensajes en el tema de Azure Service Bus.

  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.

    Captura de pantalla de la navegación a la página Flujo de registro en Azure Portal.

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

    Captura de pantalla del flujo de registro de la finalización del contenedor de servicio en Azure Portal.

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

    Captura de pantalla del flujo de registro del contenedor del servicio de procesador de pedidos en 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 en la aplicación totalmente funcional.

Ejecución de la aplicación de Python localmente

Antes de implementar la aplicación en Azure Container Apps, ejecute los servicios order-processor y checkout localmente con Dapr y Azure Service Bus.

Preparación del proyecto

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

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

    cd pubsub-dapr-python-servicebus
    

Ejecute las aplicaciones mediante la CLI de Dapr

Comience ejecutando el servicio de suscriptor 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.

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

  1. En una nueva ventana de terminal, desde el directorio raíz del ejemplo, vaya al servicio de publicador de checkout.

    cd checkout
    
  2. Instale las dependencias.

    pip3 install -r requirements.txt
    
  3. Ejecute el servicio checkout.

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

Salida prevista

En ambos terminales, el servicio checkout publica 10 mensajes recibidos por el servicio order-processor antes de salir.

Salida de 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}

Salida de 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. Asegúrese de que ambas aplicaciones se han detenido mediante la ejecución de los siguientes comandos. En el terminal de extracción:

    dapr stop --app-id checkout
    

    En el terminal de procesador de pedidos:

    dapr stop --app-id order-processor
    

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 pubsub-dapr-python-servicebus

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 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ó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: 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
    

Confirmación de la implementación correcta

En Azure Portal, compruebe que el servicio checkout está publicando mensajes en el tema de Azure Service Bus.

  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.

    Captura de pantalla de la navegación a la página Flujo de registro en Azure Portal.

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

    Captura de pantalla del flujo de registro de la finalización del contenedor de servicio en Azure Portal.

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

    Captura de pantalla del flujo de registro del contenedor del servicio de procesador de pedidos en 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 en la aplicación totalmente funcional.

Ejecución local de las aplicaciones .NET

Antes de implementar la aplicación en Azure Container Apps, ejecute los servicios order-processor y checkout localmente con Dapr y Azure Service Bus.

Preparación del proyecto

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

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

    cd pubsub-dapr-csharp-servicebus
    

Ejecute las aplicaciones mediante la CLI de Dapr

Comience ejecutando el servicio de suscriptor de order-processor

  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.

    dapr run --app-id order-processor --resources-path ../components/ --app-port 7001 -- dotnet run --project .
    
  4. En una nueva ventana de terminal, desde el directorio raíz del ejemplo, vaya al servicio de publicador de checkout.

    cd checkout
    
  5. Instale las dependencias.

    dotnet build
    
  6. Ejecute el servicio checkout.

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

    Salida prevista

    En ambos terminales, el servicio checkout publica 10 mensajes recibidos por el servicio order-processor antes de salir.

    Salida de 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}
    

    Salida de 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. Asegúrese de que ambas aplicaciones se han detenido mediante la ejecución de los siguientes comandos. En el terminal de extracción.

    dapr stop --app-id checkout
    

    En el terminal de procesador de pedidos:

    dapr stop --app-id order-processor
    

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 pubsub-dapr-csharp-servicebus

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 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ó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: 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
    

Confirmación de la implementación correcta

En Azure Portal, compruebe que el servicio checkout está publicando mensajes en el tema de Azure Service Bus.

  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.

    Captura de pantalla de la navegación a la página Flujo de registro en Azure Portal.

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

    Captura de pantalla del flujo de registro de la finalización del contenedor de servicio en Azure Portal.

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

    Captura de pantalla del flujo de registro del contenedor del servicio de procesador de pedidos en 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 en 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