Microservices-Kommunikation mit Dapr Publish und Subscribe

In diesem Tutorial erstellen Sie Herausgeber- und Abonnenten-Microservices, die die Dapr Pub/Sub-API nutzen, um mithilfe von Nachrichten für ereignisgesteuerte Architekturen zu kommunizieren. Sie werden folgende Aufgaben durchführen:

  • Erstellen Sie einen Herausgeber-Microservice und einen Abonnenten-Microservice, der die Dapr pub/sub-API nutzt, um mithilfe von Nachrichten für ereignisgesteuerte Architekturen zu kommunizieren.
  • Stellen Sie die Anwendung den Azure Container-Apps über die Azure Developer CLI mittels der zur Verfügung gestellten Bicep bereit.

Das Beispielprojekt "pub/sub" umfasst:

  1. Ein checkout-Dienst zur Generierung von Nachrichten (Herausgeber), der Nachrichten zu einem bestimmten Thema generiert
  2. Einen order-processor-Dienst (Abonnent), der Nachrichten vom checkout-Dienst zu einem bestimmten Thema abhört

Diagramm des Pub/Sub-Beispiels

Voraussetzungen

Führen Sie die Node.js-Anwendungen lokal aus

Bevor Sie die Anwendung in Azure Container-Apps bereitstellen, führen Sie die order-processor Dienstecheckout lokal mit Dapr und Azure Service Bus aus.

Vorbereiten des Projekts

  1. Klonen Sie die Beispielanwendung auf Ihren lokalen Computer.

    git clone https://github.com/Azure-Samples/pubsub-dapr-nodejs-servicebus.git
    
  2. Navigieren Sie zum Stammverzeichnis des Beispiels.

    cd pubsub-dapr-nodejs-servicebus
    

Ausführen der Anwendungen mit der Dapr CLI

Führen Sie zunächst den order-processor-Abonnentendienst aus.

  1. Ändern Sie im Stammverzeichnis des Beispiels Verzeichnisse inorder-processor.

    cd order-processor
    
  2. Installieren Sie die Abhängigkeiten.

    npm install
    
  3. Führen Sie den Dienst order-processor aus.

    dapr run --app-port 5001 --app-id order-processing --app-protocol http --dapr-http-port 3501 --resources-path ../components -- npm run start
    
  4. Navigieren Sie in einem neuen Terminalfenster aus dem Stammverzeichnis des Beispiels zum checkout Dienst des Herausgeber.

    cd checkout
    
  5. Installieren Sie die Abhängigkeiten.

    npm install
    
  6. Führen Sie den Dienst checkout aus.

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

    Erwartete Ausgabe

    In beiden Terminals checkout veröffentlicht der Dienst 10 Nachrichten, die vom order-processor Dienst empfangen wurden, bevor er beendet wird.

    checkoutOutput

    == 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-processorOutput

    == 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. Stellen Sie sicher, dass beide Anwendungen beendet wurden, indem Sie die folgenden Befehle ausführen. Im Check-Out-Terminal:

    dapr stop --app-id checkout
    

    Im Auftragsverarbeitungsterminal:

    dapr stop --app-id order-processor
    

Bereitstellen der Anwendungsvorlage mithilfe der Azure Developer CLI

Stellen Sie die Anwendung mittelsazd für Azure Container Apps bereit.

Vorbereiten des Projekts

Navigieren Sie in einem neuen Terminalfenster zum Stammverzeichnis des Beispiels.

cd pubsub-dapr-nodejs-servicebus

Stellen Sie es mithilfe der Azure Developer CLI her und bereit

  1. Führen Sie esazd init aus, um das Projekt zu initialisieren.

    azd init
    
  2. Wenn Sie im Terminal dazu aufgefordert werden, geben Sie die folgenden Parameter ein.

    Parameter BESCHREIBUNG
    Umgebungsname Präfix für die Ressourcengruppe, die für alle Azure-Ressourcen erstellt wurde.
    Azure-Speicherort Der Azure-Speicherort für Ihre Ressourcen.
    Azure-Abonnement Das Azure-Abonnement für Ihre Ressourcen.
  3. Führen Sie azd up aus, um die Infrastruktur bereitzustellen und die Anwendung mit einem einzigen Befehl in Azure Container Apps bereitzustellen.

    azd up
    

    Dieser Vorgang nimmt einige Zeit in Anspruch. Nach Abschluss des azd up Befehls zeigt die CLI-Ausgabe zwei Azure-Portal-Links an, um den Bereitstellungsfortschritt zu überwachen. Die Ausgabe veranschaulicht außerdem, wie azd up:

    • Erstellt und konfiguriert alle erforderlichen Azure-Ressourcen mithilfe der bereitgestellten Bicep-Dateien im ./infra Verzeichnis mitazd provision. Nachdem Sie die Azure Developer CLI bereitgestellt haben, können Sie über das Azure-Portal auf diese Ressourcen zugreifen. Zu den Dateien, die die Azure-Ressourcen bereitstellen, gehören:
      • main.parameters.json
      • main.bicep
      • Ein app Ressourcenverzeichnis, das nach Funktionalität organisiert ist
      • Eine core Referenzbibliothek, die die von der azd Vorlage verwendeten Bicep-Module enthält
    • Stellt den Code mithilfe von azd deploy bereit

    Erwartete Ausgabe

    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
    

Bestätigen Sie die erfolgreiche Bereitstellung

Überprüfen Sie im Azure-Portal, ob der checkout Dienst Nachrichten im Thema Azure Service Bus veröffentlicht.

  1. Kopieren Sie den checkout Container-App-Namen aus der Terminalausgabe.

  2. Melden Sie sich beim Azure-Portal an und suchen Sie anhand des Namens nach der Container-App-Ressource.

  3. Wählen Sie im Dashboard "Container-Apps" den Überwachungs->protokolldatenstromaus.

    Screenshot: Navigation zur Seite „Protokolldatenstrom“ im Azure-Portal

  4. Vergewissern Sie sich, dass der checkout Container die gleiche Ausgabe wie zuvor im Terminal protokolliert.

    Screenshot: Protokolldatenstrom des Check-Out-Dienstcontainers im Azure-Portal

  5. Gehen Sie gleichermaßen für den order-processor Service vor.

    Screenshot: Protokolldatenstrom des Dienstcontainers des Auftragsverarbeiters im Azure-Portal

Was ist passiert?

Nach erfolgreichem Abschluss des azd up Befehls:

  • Azure Developer CLI hat die Azure-Ressourcen bereitgestellt, auf die im Verzeichnis./infra des Beispielprojektsauf das von Ihnen angegebene Azure-Abonnement verwiesen wird. Sie können diese Azure-Ressourcen jetzt über das Azure-Portal anzeigen.
  • Die App, die für die Azure-Container-Apps bereitgestellt wurde. Über das Portal können Sie zur voll funktionsfähigen App navigieren.

Führen Sie die Python-Anwendungen lokal aus

Bevor Sie die Anwendung in Azure Container-Apps bereitstellen, führen Sie die order-processor Dienstecheckout lokal mit Dapr und Azure Service Bus aus.

Vorbereiten des Projekts

  1. Klonen Sie die Beispielanwendung auf Ihren lokalen Computer.

    git clone https://github.com/Azure-Samples/pubsub-dapr-python-servicebus.git
    
  2. Navigieren Sie zum Stammverzeichnis des Beispiels.

    cd pubsub-dapr-python-servicebus
    

Ausführen der Anwendungen mit der Dapr CLI

Führen Sie zunächst den order-processor-Abonnentendienst aus.

  1. Ändern Sie im Stammverzeichnis des Beispiels Verzeichnisse inorder-processor.

    cd order-processor
    
  2. Installieren Sie die Abhängigkeiten.

    pip3 install -r requirements.txt
    
  3. Führen Sie den Dienst order-processor aus.

    dapr run --app-id order-processor --resources-path ../components/ --app-port 5001 -- python3 app.py
    
  4. Navigieren Sie in einem neuen Terminalfenster aus dem Stammverzeichnis des Beispiels zum checkout Dienst des Herausgeber.

    cd checkout
    
  5. Installieren Sie die Abhängigkeiten.

    pip3 install -r requirements.txt
    
  6. Führen Sie den Dienst checkout aus.

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

    Erwartete Ausgabe

    In beiden Terminals checkout veröffentlicht der Dienst 10 Nachrichten, die vom order-processor Dienst empfangen wurden, bevor er beendet wird.

    checkoutOutput

    == 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-processorOutput

    == 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. Stellen Sie sicher, dass beide Anwendungen beendet wurden, indem Sie die folgenden Befehle ausführen. Im Check-Out-Terminal:

    dapr stop --app-id checkout
    

    Im Auftragsverarbeitungsterminal:

    dapr stop --app-id order-processor
    

Bereitstellen der Anwendungsvorlage mithilfe der Azure Developer CLI

Stellen Sie die Anwendung mittelsazd für Azure Container Apps bereit.

Vorbereiten des Projekts

Navigieren Sie in einem neuen Terminalfenster zum Stammverzeichnis des Beispiels.

cd pubsub-dapr-python-servicebus

Stellen Sie es mithilfe der Azure Developer CLI her und bereit

  1. Führen Sie esazd init aus, um das Projekt zu initialisieren.

    azd init
    
  2. Wenn Sie im Terminal dazu aufgefordert werden, geben Sie die folgenden Parameter ein.

    Parameter BESCHREIBUNG
    Umgebungsname Präfix für die Ressourcengruppe, die für alle Azure-Ressourcen erstellt wurde.
    Azure-Speicherort Der Azure-Speicherort für Ihre Ressourcen.
    Azure-Abonnement Das Azure-Abonnement für Ihre Ressourcen.
  3. Führen Sie azd up aus, um die Infrastruktur bereitzustellen und die Anwendung mit einem einzigen Befehl in Azure Container Apps bereitzustellen.

    azd up
    

    Dieser Vorgang nimmt einige Zeit in Anspruch. Nach Abschluss des azd up Befehls zeigt die CLI-Ausgabe zwei Azure-Portal-Links an, um den Bereitstellungsfortschritt zu überwachen. Die Ausgabe veranschaulicht außerdem, wie azd up:

    • Erstellt und konfiguriert alle erforderlichen Azure-Ressourcen mithilfe der bereitgestellten Bicep-Dateien im ./infra Verzeichnis mitazd provision. Nachdem Sie die Azure Developer CLI bereitgestellt haben, können Sie über das Azure-Portal auf diese Ressourcen zugreifen. Zu den Dateien, die die Azure-Ressourcen bereitstellen, gehören:
      • main.parameters.json
      • main.bicep
      • Ein app Ressourcenverzeichnis, das nach Funktionalität organisiert ist
      • Eine core Referenzbibliothek, die die von der azd Vorlage verwendeten Bicep-Module enthält
    • Stellt den Code mithilfe von azd deploy bereit

    Erwartete Ausgabe

    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
    

Bestätigen Sie die erfolgreiche Bereitstellung

Überprüfen Sie im Azure-Portal, ob der checkout Dienst Nachrichten im Thema Azure Service Bus veröffentlicht.

  1. Kopieren Sie den checkout Container-App-Namen aus der Terminalausgabe.

  2. Melden Sie sich beim Azure-Portal an und suchen Sie anhand des Namens nach der Container-App-Ressource.

  3. Wählen Sie im Dashboard "Container-Apps" den Überwachungs->protokolldatenstromaus.

    Screenshot: Navigation zur Seite „Protokolldatenstrom“ im Azure-Portal

  4. Vergewissern Sie sich, dass der checkout Container die gleiche Ausgabe wie zuvor im Terminal protokolliert.

    Screenshot: Protokolldatenstrom des Check-Out-Dienstcontainers im Azure-Portal

  5. Gehen Sie gleichermaßen für den order-processor Service vor.

    Screenshot: Protokolldatenstrom des Dienstcontainers des Auftragsverarbeiters im Azure-Portal

Was ist passiert?

Nach erfolgreichem Abschluss des azd up Befehls:

  • Azure Developer CLI hat die Azure-Ressourcen bereitgestellt, auf die im Verzeichnis./infra des Beispielprojektsauf das von Ihnen angegebene Azure-Abonnement verwiesen wird. Sie können diese Azure-Ressourcen jetzt über das Azure-Portal anzeigen.
  • Die App, die für die Azure-Container-Apps bereitgestellt wurde. Über das Portal können Sie zur voll funktionsfähigen App navigieren.

Lokales Ausführen der .NET-Anwendungen

Bevor Sie die Anwendung in Azure Container-Apps bereitstellen, führen Sie die order-processor Dienstecheckout lokal mit Dapr und Azure Service Bus aus.

Vorbereiten des Projekts

  1. Klonen Sie die Beispielanwendung auf Ihren lokalen Computer.

    git clone https://github.com/Azure-Samples/pubsub-dapr-csharp-servicebus.git
    
  2. Navigieren Sie zum Stammverzeichnis des Beispiels.

    cd pubsub-dapr-csharp-servicebus
    

Ausführen der Anwendungen mit der Dapr CLI

Führen Sie zunächst den order-processor-Abonnentendienst aus.

  1. Ändern Sie im Stammverzeichnis des Beispiels Verzeichnisse inorder-processor.

    cd order-processor
    
  2. Installieren Sie die Abhängigkeiten.

    dotnet build
    
  3. Führen Sie den Dienst order-processor aus.

    dapr run --app-id order-processor --resources-path ../components/ --app-port 7001 -- dotnet run --project .
    
  4. Navigieren Sie in einem neuen Terminalfenster aus dem Stammverzeichnis des Beispiels zum checkout Dienst des Herausgeber.

    cd checkout
    
  5. Installieren Sie die Abhängigkeiten.

    dotnet build
    
  6. Führen Sie den Dienst checkout aus.

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

    Erwartete Ausgabe

    In beiden Terminals checkout veröffentlicht der Dienst 10 Nachrichten, die vom order-processor Dienst empfangen wurden, bevor er beendet wird.

    checkoutOutput

    == 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-processorOutput

    == 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. Stellen Sie sicher, dass beide Anwendungen beendet wurden, indem Sie die folgenden Befehle ausführen. Im Check-Out-Terminal.

    dapr stop --app-id checkout
    

    Im Auftragsverarbeitungsterminal:

    dapr stop --app-id order-processor
    

Bereitstellen der Anwendungsvorlage mithilfe der Azure Developer CLI

Stellen Sie die Anwendung mittelsazd für Azure Container Apps bereit.

Vorbereiten des Projekts

Navigieren Sie in einem neuen Terminalfenster zum Stammverzeichnis des Beispiels.

cd pubsub-dapr-csharp-servicebus

Stellen Sie es mithilfe der Azure Developer CLI her und bereit

  1. Führen Sie esazd init aus, um das Projekt zu initialisieren.

    azd init
    
  2. Wenn Sie im Terminal dazu aufgefordert werden, geben Sie die folgenden Parameter ein.

    Parameter BESCHREIBUNG
    Umgebungsname Präfix für die Ressourcengruppe, die für alle Azure-Ressourcen erstellt wurde.
    Azure-Speicherort Der Azure-Speicherort für Ihre Ressourcen.
    Azure-Abonnement Das Azure-Abonnement für Ihre Ressourcen.
  3. Führen Sie azd up aus, um die Infrastruktur bereitzustellen und die Anwendung mit einem einzigen Befehl in Azure Container Apps bereitzustellen.

    azd up
    

    Dieser Vorgang nimmt einige Zeit in Anspruch. Nach Abschluss des azd up Befehls zeigt die CLI-Ausgabe zwei Azure-Portal-Links an, um den Bereitstellungsfortschritt zu überwachen. Die Ausgabe veranschaulicht außerdem, wie azd up:

    • Erstellt und konfiguriert alle erforderlichen Azure-Ressourcen mithilfe der bereitgestellten Bicep-Dateien im ./infra Verzeichnis mitazd provision. Nachdem Sie die Azure Developer CLI bereitgestellt haben, können Sie über das Azure-Portal auf diese Ressourcen zugreifen. Zu den Dateien, die die Azure-Ressourcen bereitstellen, gehören:
      • main.parameters.json
      • main.bicep
      • Ein app Ressourcenverzeichnis, das nach Funktionalität organisiert ist
      • Eine core Referenzbibliothek, die die von der azd Vorlage verwendeten Bicep-Module enthält
    • Stellt den Code mithilfe von azd deploy bereit

    Erwartete Ausgabe

    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
    

Bestätigen Sie die erfolgreiche Bereitstellung

Überprüfen Sie im Azure-Portal, ob der checkout Dienst Nachrichten im Thema Azure Service Bus veröffentlicht.

  1. Kopieren Sie den checkout Container-App-Namen aus der Terminalausgabe.

  2. Melden Sie sich beim Azure-Portal an und suchen Sie anhand des Namens nach der Container-App-Ressource.

  3. Wählen Sie im Dashboard "Container-Apps" den Überwachungs->protokolldatenstromaus.

    Screenshot: Navigation zur Seite „Protokolldatenstrom“ im Azure-Portal

  4. Vergewissern Sie sich, dass der checkout Container die gleiche Ausgabe wie zuvor im Terminal protokolliert.

    Screenshot: Protokolldatenstrom des Check-Out-Dienstcontainers im Azure-Portal

  5. Gehen Sie gleichermaßen für den order-processor Service vor.

    Screenshot: Protokolldatenstrom des Dienstcontainers des Auftragsverarbeiters im Azure-Portal

Was ist passiert?

Nach erfolgreichem Abschluss des azd up Befehls:

  • Azure Developer CLI hat die Azure-Ressourcen bereitgestellt, auf die im Verzeichnis./infra des Beispielprojektsauf das von Ihnen angegebene Azure-Abonnement verwiesen wird. Sie können diese Azure-Ressourcen jetzt über das Azure-Portal anzeigen.
  • Die App, die für die Azure-Container-Apps bereitgestellt wurde. Über das Portal können Sie zur voll funktionsfähigen App navigieren.

Bereinigen von Ressourcen

Wenn Sie diese Anwendung nicht weiterhin verwenden werden, löschen Sie die Azure-Ressourcen, die Sie mit dem folgenden Befehl bereitgestellt haben:

azd down

Nächste Schritte