Delen via


Zelfstudie: Gebruik maken van Dapr publiceren en abonneren voor communicatie tussen microservices

In een publicatie-/abonnerensysteem (pub/sub) kunt u Distributed Application Runtime (Dapr) gebruiken om de communicatie tussen uw microservices en de berichtenbroker te stroomlijnen en te standaardiseren.

  • De uitgever-app publiceert berichten via een Dapr-sidecar. De sidecar verwerkt de werkelijke communicatie met de broker.
  • De abonnee-app ontvangt berichten via een Dapr-sidecar. De sidecar ontvangt berichten van de broker en roept de endpoint van de subscriber-app aan met de berichtinhoud.

In deze handleiding wordt een voorbeeldproject gebruikt om te demonstreren hoe u een Dapr pub/sub-systeem draait. Het voorbeeld bevat:

  • Een berichtengeneratorservice checkout (de uitgever) die berichten van een specifiek onderwerp genereert.
  • Een order-processor service (de abonnee) die luistert naar berichten van de checkout service van een specifiek onderwerp.

Diagram met de berichtenstroom van een kassa-app naar een servicebus via Dapr en van de servicebus naar een orderprocessor-app via Dapr.

In deze handleiding leert u:

  • Maak een uitgeversmicroservice en een abonnee microservice die de Dapr pub/sub-API gebruikt om berichten te verzenden en te ontvangen voor gebeurtenisgestuurde architecturen.
  • Deploy de toepassing naar Azure Container Apps met behulp van de Azure Developer CLI en Bicep-bestanden die in het voorbeeldproject worden verstrekt.

Vereisten

De Node.js-toepassingen lokaal uitvoeren

Voordat u de toepassing implementeert in Container Apps, voert u de stappen in de volgende secties uit om de order-processor en checkout services lokaal uit te voeren met Dapr en Azure Service Bus.

Het project voorbereiden

  1. Kloon de voorbeeldtoepassing naar uw lokale computer.

    git clone https://github.com/Azure-Samples/pubsub-dapr-nodejs-servicebus.git
    
  2. Ga naar de basisdirectory van het voorbeeld.

    cd pubsub-dapr-nodejs-servicebus
    

De toepassingen uitvoeren met behulp van de Dapr CLI

Voer de volgende stappen uit om de order-processor abonneeservice en de checkout uitgeverservice uit te voeren.

  1. Ga vanuit de hoofdmap van het voorbeeld naar de map order-processor.

    cd order-processor
    
  2. Installeer de afhankelijkheden.

    npm install
    
  3. Voer de order-processor service uit.

    dapr run --app-port 5001 --app-id order-processing --app-protocol http --dapr-http-port 3501 --resources-path ../components -- npm run start
    
  4. Ga in een nieuw terminalvenster naar de hoofdmap van het voorbeeld en ga vervolgens naar de map voor uitchecken .

    cd checkout
    
  5. Installeer de afhankelijkheden.

    npm install
    
  6. Voer de checkout service uit.

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

Verwachte uitvoer

In de checkout terminal publiceert de checkout service 20 berichten en wordt vervolgens tijdelijk onderbroken.

== 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}
== APP == Published data: {"orderId":11}
== APP == Published data: {"orderId":12}
== APP == Published data: {"orderId":13}
== APP == Published data: {"orderId":14}
== APP == Published data: {"orderId":15}
== APP == Published data: {"orderId":16}
== APP == Published data: {"orderId":17}
== APP == Published data: {"orderId":18}
== APP == Published data: {"orderId":19}
== APP == Published data: {"orderId":20}

In de order-processor terminal ontvangt de order-processor service 20 berichten.

== 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}
== APP == Subscriber received: {"orderId":11}
== APP == Subscriber received: {"orderId":12}
== APP == Subscriber received: {"orderId":13}
== APP == Subscriber received: {"orderId":14}
== APP == Subscriber received: {"orderId":15}
== APP == Subscriber received: {"orderId":16}
== APP == Subscriber received: {"orderId":17}
== APP == Subscriber received: {"orderId":18}
== APP == Subscriber received: {"orderId":19}
== APP == Subscriber received: {"orderId":20}

De toepassingen stoppen

Als u de toepassingen wilt stoppen, opent u een afzonderlijke terminal en voert u de volgende opdrachten uit:

dapr stop --app-id checkout
dapr stop --app-id order-processor

De toepassingssjabloon implementeren met behulp van de Azure Developer CLI

Als u de toepassing wilt implementeren in Container Apps met behulp van azd opdrachten, voert u de stappen in de volgende secties uit.

Het project voorbereiden

Ga in een nieuw terminalvenster naar de hoofdmap van het voorbeeld .

cd pubsub-dapr-nodejs-servicebus

Maken en implementeren met behulp van de Azure Developer CLI

  1. Voer azd init uit om het project te initialiseren.

    azd init
    

    Wanneer u hierom wordt gevraagd in de terminal, voert u een unieke omgevingsnaam in. De opdracht gebruikt deze naam als voorvoegsel voor de resourcegroep die wordt gemaakt om alle Azure-resources op te slaan.

  2. Voer azd up deze opdracht uit om de infrastructuur voor te bereiden en de toepassing in Container Apps te implementeren in één opdracht.

    azd up
    

    Wanneer u hierom wordt gevraagd in de terminal, voert u waarden in voor de volgende parameters:

    Parameter Description
    Azure-abonnement Het Azure-abonnement voor uw resources
    Azure-locatie De Azure-locatie voor uw resources

    Het kan enige tijd duren voordat dit proces is voltooid. Terwijl de azd up opdracht wordt uitgevoerd, worden in de uitvoer twee Azure Portal-koppelingen getoond die u kunt gebruiken om de voortgang van de implementatie te controleren. De uitvoer laat ook zien hoe azd up:

    • Hiermee maakt en configureert u alle benodigde Azure-resources via de Bicep-bestanden in de map ./infra met behulp van azd provision. Nadat de Azure Developer CLI deze resources heeft geïmplementeerd, kunt u de Azure-portal gebruiken om ze te openen. De bestanden die worden gebruikt om de Azure-resources te configureren, zijn onder andere:
      • main.parameters.json.
      • main.bicep.
      • Een map met app-resources geordend op functionaliteit.
      • Een kernreferentiebibliotheek met de Bicep-modules die door de azd sjabloon worden gebruikt.
    • De code wordt uitgerold met behulp van azd deploy.

Verwachte uitvoer

Met azd init de opdracht wordt uitvoer weergegeven die vergelijkbaar is met de volgende regels:

Initializing an app to run on Azure (azd init)

? Enter a unique environment name: [? for help] <environment-name>

? Enter a unique environment name: <environment-name>

SUCCESS: Initialized environment <environment-name>.

Met azd up de opdracht wordt uitvoer weergegeven die vergelijkbaar is met de volgende regels:

? Select an Azure Subscription to use:  3. <subscription-name> (aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e)
? Enter a value for the 'location' infrastructure parameter: 51. (US) East US 2 (eastus2)

Packaging services (azd package)

  (✓) Done: Packaging service checkout
  - Container: pubsub-dapr-javascript-servicebus-aca/checkout-<environment-name>:azd-deploy-1764784418


  (✓) Done: Packaging service orders
  - Container: pubsub-dapr-javascript-servicebus-aca/orders-<environment-name>:azd-deploy-1764784420


Provisioning Azure resources (azd provision)
Provisioning Azure resources can take some time.

Subscription: <subscription-name> (aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e)
Location: East US 2

  You can view detailed progress in the Azure Portal:
  https://portal.azure.com/#view/HubsExtension/DeploymentDetailsBlade/~/overview/id/%2Fsubscriptions%2Faaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e%2Fproviders%2FMicrosoft.Resources%2Fdeployments%2F<environment-name>-1764784426

  (✓) Done: Resource group: rg-<environment-name> (2.805s)
  (✓) Done: Service Bus Namespace: sb-a1bc2de3fh4ij (17.866s)
  (✓) Done: Log Analytics workspace: log-a1bc2de3fh4ij (23.262s)
  (✓) Done: Application Insights: appi-a1bc2de3fh4ij (3.167s)
  (✓) Done: Portal dashboard: dash-a1bc2de3fh4ij (1.858s)
  (✓) Done: Container Registry: cra1bc2de3fh4ij (20.097s)
  (✓) Done: Container Apps Environment: cae-a1bc2de3fh4ij (1m39.71s)
  (✓) Done: Container App: ca-orders-a1bc2de3fh4ij (19.927s)
  (✓) Done: Container App: ca-checkout-a1bc2de3fh4ij (20.213s)

Deploying services (azd deploy)

  (✓) Done: Deploying service checkout

  (✓) Done: Deploying service orders
  - Endpoint: https://ca-orders-a1bc2de3fh4ij.gentlebeach-c2de3fh4.eastus2.azurecontainerapps.io/


SUCCESS: Your up workflow to provision and deploy to Azure completed in 5 minutes 10 seconds.

Geslaagde implementatie bevestigen

Voer de volgende stappen uit om te controleren of de checkout service berichten publiceert naar het Service Bus-onderwerp en of de order-processor service de berichten ontvangt.

  1. Kopieer in de terminaluitvoer de naam van de checkout container-app.

  2. Meld u aan bij Azure Portal en zoek vervolgens op naam naar de container-app-resource.

  3. Op de overzichtspagina van de container-app, selecteer Monitoring>Log stream.

    Schermopname van het zijpaneel van Azure Portal. Onder Bewaking is de logboekstream gemarkeerd.

  4. Selecteer uitchecken op de pagina Logboekstream naast Container.

    Schermopname van de Logstream-pagina voor de Checkout-containerapp. In de containerlijst is Checkout gemarkeerd.

  5. Controleer of de checkout container dezelfde uitvoer aanmeldt als in de terminal eerder.

    Connecting to stream...
    2025-12-03T17:59:44.86984  Connecting to the container 'checkout'...
    
    2025-12-03T17:59:44.88762  Successfully Connected to container: 'checkout' [Revision: 'ca-checkout-a1bc2de3fh4ij--azd-1010101010', Replica: 'ca-checkout-a1bc2de3fh4ij--azd-1010101010-e3fh4ij5kl-6mn7o']
    2025-12-03T17:59:20.110076973Z Published data: {"orderId":1}
    2025-12-03T17:59:21.122761423Z Published data: {"orderId":2}
    2025-12-03T17:59:22.134562301Z Published data: {"orderId":3}
    2025-12-03T17:59:23.148699507Z Published data: {"orderId":4}
    2025-12-03T17:59:24.160779162Z Published data: {"orderId":5}
    2025-12-03T17:59:25.176694795Z Published data: {"orderId":6}
    2025-12-03T17:59:26.189284846Z Published data: {"orderId":7}
    2025-12-03T17:59:27.201353592Z Published data: {"orderId":8}
    2025-12-03T17:59:28.217884685Z Published data: {"orderId":9}
    2025-12-03T17:59:29.229885611Z Published data: {"orderId":10}
    2025-12-03T17:59:30.242877567Z Published data: {"orderId":11}
    2025-12-03T17:59:31.255062497Z Published data: {"orderId":12}
    2025-12-03T17:59:32.270373602Z Published data: {"orderId":13}
    2025-12-03T17:59:33.283227059Z Published data: {"orderId":14}
    2025-12-03T17:59:34.297275983Z Published data: {"orderId":15}
    2025-12-03T17:59:35.309770245Z Published data: {"orderId":16}
    2025-12-03T17:59:36.324099049Z Published data: {"orderId":17}
    2025-12-03T17:59:37.337279276Z Published data: {"orderId":18}
    2025-12-03T17:59:38.351045429Z Published data: {"orderId":19}
    2025-12-03T17:59:39.364701033Z Published data: {"orderId":20}
    
  6. Voer vergelijkbare stappen uit voor de order-processor service.

    Connecting to stream...
    2025-12-03T17:59:54.59128  Connecting to the container 'orders'...
    
    2025-12-03T17:59:54.62517  Successfully Connected to container: 'orders' [Revision: 'ca-orders-h4ij5kl6mn7op--azd-1010101010', Replica: 'ca-orders-h4ij5kl6mn7op--azd-1010101010-8qr9st0uv1-wx2yz']
    2025-12-03T17:59:20.121003257Z Subscriber received: {"orderId":1}
    2025-12-03T17:59:21.134397375Z Subscriber received: {"orderId":2}
    2025-12-03T17:59:22.145897352Z Subscriber received: {"orderId":3}
    2025-12-03T17:59:23.159802356Z Subscriber received: {"orderId":4}
    2025-12-03T17:59:24.173394595Z Subscriber received: {"orderId":5}
    2025-12-03T17:59:25.188890235Z Subscriber received: {"orderId":6}
    2025-12-03T17:59:26.200088846Z Subscriber received: {"orderId":7}
    2025-12-03T17:59:27.212526588Z Subscriber received: {"orderId":8}
    2025-12-03T17:59:28.236604126Z Subscriber received: {"orderId":9}
    2025-12-03T17:59:29.242356323Z Subscriber received: {"orderId":10}
    2025-12-03T17:59:30.253994680Z Subscriber received: {"orderId":11}
    2025-12-03T17:59:31.267712900Z Subscriber received: {"orderId":12}
    2025-12-03T17:59:32.282449416Z Subscriber received: {"orderId":13}
    2025-12-03T17:59:33.296803973Z Subscriber received: {"orderId":14}
    2025-12-03T17:59:34.308987729Z Subscriber received: {"orderId":15}
    2025-12-03T17:59:35.321011193Z Subscriber received: {"orderId":16}
    2025-12-03T17:59:36.336338712Z Subscriber received: {"orderId":17}
    2025-12-03T17:59:37.347838169Z Subscriber received: {"orderId":18}
    2025-12-03T17:59:38.370022121Z Subscriber received: {"orderId":19}
    2025-12-03T17:59:39.377157717Z Subscriber received: {"orderId":20}
    

Inzicht in AZD up

Wanneer de azd up opdracht wordt uitgevoerd:

  • De Azure Developer CLI maakt de Azure-resources waarnaar wordt verwezen in de infra-directory van het voorbeeldproject in het Azure-abonnement dat u opgeeft. U vindt deze Azure-resources in Azure Portal.
  • De app wordt geïmplementeerd in Container Apps. In Azure Portal hebt u toegang tot de volledig functionele app.

De Python-toepassingen lokaal uitvoeren

Voordat u de toepassing implementeert in Container Apps, voert u de stappen in de volgende secties uit om de order-processor en checkout services lokaal uit te voeren met Dapr en Azure Service Bus.

Het project voorbereiden

  1. Kloon de voorbeeldtoepassing naar uw lokale computer.

    git clone https://github.com/Azure-Samples/pubsub-dapr-python-servicebus.git
    
  2. Ga naar de basisdirectory van het voorbeeld.

    cd pubsub-dapr-python-servicebus
    

De toepassingen uitvoeren met behulp van de Dapr CLI

Voer de volgende stappen uit om de order-processor abonneeservice en de checkout uitgeverservice uit te voeren.

  1. Ga vanuit de hoofdmap van het voorbeeld naar de map order-processor.

    cd order-processor
    
  2. Installeer de afhankelijkheden.

    pip3 install -r requirements.txt
    
  3. Voer de order-processor service uit.

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

  1. Ga in een nieuw terminalvenster naar de hoofdmap van het voorbeeld en ga vervolgens naar de map voor uitchecken .

    cd checkout
    
  2. Installeer de afhankelijkheden.

    pip3 install -r requirements.txt
    
  3. Voer de checkout service uit.

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

Verwachte uitvoer

In de checkout terminal publiceert de checkout service 19 berichten en wordt vervolgens tijdelijk onderbroken.

== APP == INFO:root:Published data: {"orderId": 1}
== APP == INFO:root:Published data: {"orderId": 2}
== APP == INFO:root:Published data: {"orderId": 3}
== APP == INFO:root:Published data: {"orderId": 4}
== APP == INFO:root:Published data: {"orderId": 5}
== APP == INFO:root:Published data: {"orderId": 6}
== APP == INFO:root:Published data: {"orderId": 7}
== APP == INFO:root:Published data: {"orderId": 8}
== APP == INFO:root:Published data: {"orderId": 9}
== APP == INFO:root:Published data: {"orderId": 10}
== APP == INFO:root:Published data: {"orderId": 11}
== APP == INFO:root:Published data: {"orderId": 12}
== APP == INFO:root:Published data: {"orderId": 13}
== APP == INFO:root:Published data: {"orderId": 14}
== APP == INFO:root:Published data: {"orderId": 15}
== APP == INFO:root:Published data: {"orderId": 16}
== APP == INFO:root:Published data: {"orderId": 17}
== APP == INFO:root:Published data: {"orderId": 18}
== APP == INFO:root:Published data: {"orderId": 19}

In de order-processor terminal ontvangt de order-processor service 19 berichten.

== APP == Subscriber received : 1
== APP == 127.0.0.1 - - [03/Dec/2025 15:37:28] "POST /orders HTTP/1.1" 200 -
== APP == Subscriber received : 2
== APP == 127.0.0.1 - - [03/Dec/2025 15:37:29] "POST /orders HTTP/1.1" 200 -
== APP == Subscriber received : 3
== APP == 127.0.0.1 - - [03/Dec/2025 15:37:30] "POST /orders HTTP/1.1" 200 -
== APP == Subscriber received : 4
== APP == 127.0.0.1 - - [03/Dec/2025 15:37:31] "POST /orders HTTP/1.1" 200 -
== APP == Subscriber received : 5
== APP == 127.0.0.1 - - [03/Dec/2025 15:37:32] "POST /orders HTTP/1.1" 200 -
== APP == Subscriber received : 6
== APP == 127.0.0.1 - - [03/Dec/2025 15:37:33] "POST /orders HTTP/1.1" 200 -
== APP == Subscriber received : 7
== APP == 127.0.0.1 - - [03/Dec/2025 15:37:34] "POST /orders HTTP/1.1" 200 -
== APP == Subscriber received : 8
== APP == 127.0.0.1 - - [03/Dec/2025 15:37:35] "POST /orders HTTP/1.1" 200 -
== APP == Subscriber received : 9
== APP == 127.0.0.1 - - [03/Dec/2025 15:37:36] "POST /orders HTTP/1.1" 200 -
== APP == Subscriber received : 10
== APP == 127.0.0.1 - - [03/Dec/2025 15:37:37] "POST /orders HTTP/1.1" 200 -
== APP == Subscriber received : 11
== APP == 127.0.0.1 - - [03/Dec/2025 15:37:38] "POST /orders HTTP/1.1" 200 -
== APP == Subscriber received : 12
== APP == 127.0.0.1 - - [03/Dec/2025 15:37:39] "POST /orders HTTP/1.1" 200 -
== APP == Subscriber received : 13
== APP == 127.0.0.1 - - [03/Dec/2025 15:37:40] "POST /orders HTTP/1.1" 200 -
== APP == Subscriber received : 14
== APP == 127.0.0.1 - - [03/Dec/2025 15:37:41] "POST /orders HTTP/1.1" 200 -
== APP == Subscriber received : 15
== APP == 127.0.0.1 - - [03/Dec/2025 15:37:42] "POST /orders HTTP/1.1" 200 -
== APP == Subscriber received : 16
== APP == 127.0.0.1 - - [03/Dec/2025 15:37:43] "POST /orders HTTP/1.1" 200 -
== APP == Subscriber received : 17
== APP == 127.0.0.1 - - [03/Dec/2025 15:37:44] "POST /orders HTTP/1.1" 200 -
== APP == Subscriber received : 18
== APP == 127.0.0.1 - - [03/Dec/2025 15:37:45] "POST /orders HTTP/1.1" 200 -
== APP == Subscriber received : 19
== APP == 127.0.0.1 - - [03/Dec/2025 15:37:46] "POST /orders HTTP/1.1" 200 -

De toepassingen stoppen

Als u de toepassingen wilt stoppen, opent u een afzonderlijke terminal en voert u de volgende opdrachten uit:

dapr stop --app-id checkout
dapr stop --app-id order-processor

De toepassingssjabloon implementeren met behulp van de Azure Developer CLI

Als u de toepassing wilt implementeren in Container Apps met behulp van azd opdrachten, voert u de stappen in de volgende secties uit.

Het project voorbereiden

Ga in een nieuw terminalvenster naar de hoofdmap van het voorbeeld .

cd pubsub-dapr-python-servicebus

Maken en implementeren met behulp van de Azure Developer CLI

  1. Voer azd init uit om het project te initialiseren.

    azd init
    

    Wanneer u hierom wordt gevraagd in de terminal, voert u een unieke omgevingsnaam in. De opdracht gebruikt deze naam als voorvoegsel voor de resourcegroep die wordt gemaakt om alle Azure-resources op te slaan.

  2. Voer azd up deze opdracht uit om de infrastructuur voor te bereiden en de toepassing in Container Apps te implementeren in één opdracht.

    azd up
    

    Wanneer u hierom wordt gevraagd in de terminal, voert u waarden in voor de volgende parameters:

    Parameter Description
    Azure-abonnement Het Azure-abonnement voor uw resources
    Azure-locatie De Azure-locatie voor uw resources

    Het kan enige tijd duren voordat dit proces is voltooid. Terwijl de azd up opdracht wordt uitgevoerd, worden in de uitvoer twee Azure Portal-koppelingen getoond die u kunt gebruiken om de voortgang van de implementatie te controleren. De uitvoer laat ook zien hoe azd up:

    • Hiermee maakt en configureert u alle benodigde Azure-resources via de Bicep-bestanden in de map ./infra met behulp van azd provision. Nadat de Azure Developer CLI deze resources heeft geïmplementeerd, kunt u de Azure-portal gebruiken om ze te openen. De bestanden die worden gebruikt om de Azure-resources te configureren, zijn onder andere:
      • main.parameters.json.
      • main.bicep.
      • Een map met app-resources geordend op functionaliteit.
      • Een kernreferentiebibliotheek met de Bicep-modules die door de azd sjabloon worden gebruikt.
    • De code wordt uitgerold met behulp van azd deploy.

Verwachte uitvoer

Met azd init de opdracht wordt uitvoer weergegeven die vergelijkbaar is met de volgende regels:

Initializing an app to run on Azure (azd init)

? Enter a unique environment name: [? for help] <environment-name>

? Enter a unique environment name: <environment-name>

SUCCESS: Initialized environment <environment-name>.

Met azd up de opdracht wordt uitvoer weergegeven die vergelijkbaar is met de volgende regels:

? Select an Azure Subscription to use:  3. <subscription-name> (aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e)
? Enter a value for the 'location' infrastructure parameter: 51. (US) East US 2 (eastus2)

Packaging services (azd package)

  (✓) Done: Packaging service checkout
  - Container: pubsub-dapr-python-servicebus-aca/checkout-<environment-name>:azd-deploy-1764794878


  (✓) Done: Packaging service orders
  - Container: pubsub-dapr-python-servicebus-aca/orders-<environment-name>:azd-deploy-1764794880


Provisioning Azure resources (azd provision)
Provisioning Azure resources can take some time.

Subscription: <subscription-name> (aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e)
Location: East US 2

  You can view detailed progress in the Azure Portal:
  https://portal.azure.com/#view/HubsExtension/DeploymentDetailsBlade/~/overview/id/%2Fsubscriptions%2Faaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e%2Fproviders%2FMicrosoft.Resources%2Fdeployments%2F<environment-name>-1764794886

  (✓) Done: Resource group: rg-<environment-name> (2.444s)
  (✓) Done: Service Bus Namespace: sb-a1bc2de3fh4ij (19.857s)
  (✓) Done: Log Analytics workspace: log-a1bc2de3fh4ij (21.144s)
  (✓) Done: Application Insights: appi-a1bc2de3fh4ij (1.154s)
  (✓) Done: Portal dashboard: dash-a1bc2de3fh4ij (573ms)
  (✓) Done: Container Registry: cra1bc2de3fh4ij (19.595s)
  (✓) Done: Container Apps Environment: cae-a1bc2de3fh4ij (1m26.226s)
  (✓) Done: Container App: ca-orders-a1bc2de3fh4ij (27.124s)
  (✓) Done: Container App: ca-checkout-a1bc2de3fh4ij (28.109s)

Deploying services (azd deploy)

  (✓) Done: Deploying service checkout

  (✓) Done: Deploying service orders
  - Endpoint: https://ca-orders-a1bc2de3fh4ij.icytree-c2de3fh4.eastus2.azurecontainerapps.io/


SUCCESS: Your up workflow to provision and deploy to Azure completed in 5 minutes.

Geslaagde implementatie bevestigen

Voer de volgende stappen uit om te controleren of de checkout service berichten publiceert naar het Service Bus-onderwerp en of de order-processor service de berichten ontvangt.

  1. Kopieer in de terminaluitvoer de naam van de checkout container-app.

  2. Meld u aan bij Azure Portal en zoek vervolgens op naam naar de container-app-resource.

  3. Op de overzichtspagina van de container-app, selecteer Monitoring>Log stream.

    Schermopname van het zijpaneel in Azure Portal. Onder Bewaking is de logboekstream gemarkeerd.

  4. Selecteer uitchecken op de pagina Logboekstream naast Container.

    Schermopname van de Logstream-pagina voor de container-app 'Afrekenen'. In de containerlijst is 'Afrekenen' gemarkeerd en geselecteerd.

  5. Controleer of de checkout container dezelfde uitvoer aanmeldt als in de terminal eerder.

    Connecting to stream...
    2025-12-03T20:56:10.89517  Connecting to the container 'checkout'...
    
    2025-12-03T20:56:10.92655  Successfully Connected to container: 'checkout' [Revision: 'ca-checkout-a1bc2de3fh4ij--azd-1010101010', Replica: 'ca-checkout-a1bc2de3fh4ij--azd-1010101010-e3fh4ij5kl-6mn7o']
    2025-12-03T20:55:54.971898941Z INFO:root:Published data: {"orderId": 1}
    2025-12-03T20:55:55.985395409Z INFO:root:Published data: {"orderId": 2}
    2025-12-03T20:55:57.002043502Z INFO:root:Published data: {"orderId": 3}
    2025-12-03T20:55:58.017690382Z INFO:root:Published data: {"orderId": 4}
    2025-12-03T20:55:59.032269801Z INFO:root:Published data: {"orderId": 5}
    2025-12-03T20:56:00.045075250Z INFO:root:Published data: {"orderId": 6}
    2025-12-03T20:56:01.058436708Z INFO:root:Published data: {"orderId": 7}
    2025-12-03T20:56:02.073213603Z INFO:root:Published data: {"orderId": 8}
    2025-12-03T20:56:03.088542130Z INFO:root:Published data: {"orderId": 9}
    2025-12-03T20:56:04.102553097Z INFO:root:Published data: {"orderId": 10}
    2025-12-03T20:56:05.116147371Z INFO:root:Published data: {"orderId": 11}
    2025-12-03T20:56:06.131053744Z INFO:root:Published data: {"orderId": 12}
    2025-12-03T20:56:07.144493474Z INFO:root:Published data: {"orderId": 13}
    2025-12-03T20:56:08.158381479Z INFO:root:Published data: {"orderId": 14}
    2025-12-03T20:56:09.175048175Z INFO:root:Published data: {"orderId": 15}
    2025-12-03T20:56:10.188971144Z INFO:root:Published data: {"orderId": 16}
    2025-12-03T20:56:11.202891285Z INFO:root:Published data: {"orderId": 17}
    2025-12-03T20:56:12.217084672Z INFO:root:Published data: {"orderId": 18}
    2025-12-03T20:56:13.229771418Z INFO:root:Published data: {"orderId": 19}
    
  6. Voer vergelijkbare stappen uit voor de order-processor service.

    Connecting to stream...
    2025-12-03T20:56:18.74960  Connecting to the container 'orders'...
    
    2025-12-03T20:56:18.76913  Successfully Connected to container: 'orders' [Revision: 'ca-orders-h4ij5kl6mn7op--azd-1010101010', Replica: 'ca-orders-h4ij5kl6mn7op--azd-1010101010-8qr9st0uv1-wx2yz']
    2025-12-03T20:56:24.260129668Z Subscriber received : 1
    2025-12-03T20:56:24.260504460Z 127.0.0.1 - - [03/Dec/2025 20:56:24] "POST /orders HTTP/1.1" 200 -
    2025-12-03T20:56:25.286774893Z Subscriber received : 2
    2025-12-03T20:56:25.287837138Z 127.0.0.1 - - [03/Dec/2025 20:56:25] "POST /orders HTTP/1.1" 200 -
    2025-12-03T20:56:26.302102842Z Subscriber received : 3
    2025-12-03T20:56:26.302508442Z 127.0.0.1 - - [03/Dec/2025 20:56:26] "POST /orders HTTP/1.1" 200 -
    2025-12-03T20:56:27.316271178Z Subscriber received : 4
    2025-12-03T20:56:27.317288756Z 127.0.0.1 - - [03/Dec/2025 20:56:27] "POST /orders HTTP/1.1" 200 -
    2025-12-03T20:56:28.329865261Z Subscriber received : 5
    2025-12-03T20:56:28.330863461Z 127.0.0.1 - - [03/Dec/2025 20:56:28] "POST /orders HTTP/1.1" 200 -
    2025-12-03T20:56:29.342843607Z Subscriber received : 6
    2025-12-03T20:56:29.343687271Z 127.0.0.1 - - [03/Dec/2025 20:56:29] "POST /orders HTTP/1.1" 200 -
    2025-12-03T20:56:30.357753094Z Subscriber received : 7
    2025-12-03T20:56:30.358124513Z 127.0.0.1 - - [03/Dec/2025 20:56:30] "POST /orders HTTP/1.1" 200 -
    2025-12-03T20:56:31.380741546Z Subscriber received : 8
    2025-12-03T20:56:31.381553667Z 127.0.0.1 - - [03/Dec/2025 20:56:31] "POST /orders HTTP/1.1" 200 -
    2025-12-03T20:56:32.391023392Z Subscriber received : 9
    2025-12-03T20:56:32.391420895Z 127.0.0.1 - - [03/Dec/2025 20:56:32] "POST /orders HTTP/1.1" 200 -
    2025-12-03T20:56:33.405031572Z Subscriber received : 10
    2025-12-03T20:56:33.405412361Z 127.0.0.1 - - [03/Dec/2025 20:56:33] "POST /orders HTTP/1.1" 200 -
    2025-12-03T20:56:34.420146848Z Subscriber received : 11
    2025-12-03T20:56:34.420589649Z 127.0.0.1 - - [03/Dec/2025 20:56:34] "POST /orders HTTP/1.1" 200 -
    2025-12-03T20:56:35.432973524Z Subscriber received : 12
    2025-12-03T20:56:35.434080392Z 127.0.0.1 - - [03/Dec/2025 20:56:35] "POST /orders HTTP/1.1" 200 -
    2025-12-03T20:56:36.451629817Z Subscriber received : 13
    2025-12-03T20:56:36.452061763Z 127.0.0.1 - - [03/Dec/2025 20:56:36] "POST /orders HTTP/1.1" 200 -
    2025-12-03T20:56:37.467384128Z Subscriber received : 14
    2025-12-03T20:56:37.467686070Z 127.0.0.1 - - [03/Dec/2025 20:56:37] "POST /orders HTTP/1.1" 200 -
    2025-12-03T20:56:38.480558316Z Subscriber received : 15
    2025-12-03T20:56:38.481147786Z 127.0.0.1 - - [03/Dec/2025 20:56:38] "POST /orders HTTP/1.1" 200 -
    2025-12-03T20:56:39.493898658Z Subscriber received : 16
    2025-12-03T20:56:39.494203912Z 127.0.0.1 - - [03/Dec/2025 20:56:39] "POST /orders HTTP/1.1" 200 -
    2025-12-03T20:56:40.508312320Z Subscriber received : 17
    2025-12-03T20:56:40.508685327Z 127.0.0.1 - - [03/Dec/2025 20:56:40] "POST /orders HTTP/1.1" 200 -
    2025-12-03T20:56:41.534284222Z Subscriber received : 18
    2025-12-03T20:56:41.534598586Z 127.0.0.1 - - [03/Dec/2025 20:56:41] "POST /orders HTTP/1.1" 200 -
    2025-12-03T20:56:42.559478561Z Subscriber received : 19
    2025-12-03T20:56:42.559954290Z 127.0.0.1 - - [03/Dec/2025 20:56:42] "POST /orders HTTP/1.1" 200 -
    

Inzicht in AZD up

Wanneer de azd up opdracht wordt uitgevoerd:

  • De Azure Developer CLI maakt de Azure-resources waarnaar wordt verwezen in de infra-directory van het voorbeeldproject in het Azure-abonnement dat u opgeeft. U vindt deze Azure-resources in Azure Portal.
  • De app wordt geïmplementeerd in Container Apps. In Azure Portal hebt u toegang tot de volledig functionele app.

De .NET-toepassingen lokaal uitvoeren

Voordat u de toepassing implementeert in Container Apps, voert u de stappen in de volgende secties uit om de order-processor en checkout services lokaal uit te voeren met Dapr en Azure Service Bus.

Het project voorbereiden

  1. Kloon de voorbeeldtoepassing naar uw lokale computer.

    git clone https://github.com/Azure-Samples/pubsub-dapr-csharp-servicebus.git
    
  2. Ga naar de basisdirectory van het voorbeeld.

    cd pubsub-dapr-csharp-servicebus
    

De toepassingen uitvoeren met behulp van de Dapr CLI

Voer de volgende stappen uit om de order-processor abonneeservice en de checkout uitgeverservice uit te voeren.

  1. Ga vanuit de hoofdmap van het voorbeeld naar de map order-processor.

    cd order-processor
    
  2. Installeer de afhankelijkheden.

    dotnet build
    
  3. Voer de order-processor service uit.

    dapr run --app-id order-processor --resources-path ../components/ --app-port 7001 -- dotnet run --project .
    
  4. Ga in een nieuw terminalvenster naar de hoofdmap van het voorbeeld en ga vervolgens naar de map voor uitchecken .

    cd checkout
    
  5. Installeer de afhankelijkheden.

    dotnet build
    
  6. Voer de checkout service uit.

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

Verwachte uitvoer

In de checkout terminal publiceert de checkout service 20 berichten en wordt vervolgens tijdelijk onderbroken.

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

In de order-processor terminal ontvangt de order-processor service 20 berichten.

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

De toepassingen stoppen

Als u de toepassingen wilt stoppen, opent u een afzonderlijke terminal en voert u de volgende opdrachten uit:

dapr stop --app-id checkout
dapr stop --app-id order-processor

De toepassingssjabloon implementeren met behulp van de Azure Developer CLI

Als u de toepassing wilt implementeren in Container Apps met behulp van azd opdrachten, voert u de stappen in de volgende secties uit.

Het project voorbereiden

Ga in een nieuw terminalvenster naar de hoofdmap van het voorbeeld .

cd pubsub-dapr-csharp-servicebus

Maken en implementeren met behulp van de Azure Developer CLI

  1. Voer azd init uit om het project te initialiseren.

    azd init
    

    Wanneer u hierom wordt gevraagd in de terminal, voert u een unieke omgevingsnaam in. De opdracht gebruikt deze naam als voorvoegsel voor de resourcegroep die wordt gemaakt om alle Azure-resources op te slaan.

  2. Voer azd up deze opdracht uit om de infrastructuur voor te bereiden en de toepassing in Container Apps te implementeren in één opdracht.

    azd up
    

    Wanneer u hierom wordt gevraagd in de terminal, voert u waarden in voor de volgende parameters:

    Parameter Description
    Azure-abonnement Het Azure-abonnement voor uw resources
    Azure-locatie De Azure-locatie voor uw resources

    Het kan enige tijd duren voordat dit proces is voltooid. Terwijl de azd up opdracht wordt uitgevoerd, worden in de uitvoer twee Azure Portal-koppelingen getoond die u kunt gebruiken om de voortgang van de implementatie te controleren. De uitvoer laat ook zien hoe azd up:

    • Hiermee maakt en configureert u alle benodigde Azure-resources via de Bicep-bestanden in de map ./infra met behulp van azd provision. Nadat de Azure Developer CLI deze resources heeft geïmplementeerd, kunt u de Azure-portal gebruiken om ze te openen. De bestanden die worden gebruikt om de Azure-resources te configureren, zijn onder andere:
      • main.parameters.json.
      • main.bicep.
      • Een map met app-resources geordend op functionaliteit.
      • Een kernreferentiebibliotheek met de Bicep-modules die door de azd sjabloon worden gebruikt.
    • De code wordt uitgerold met behulp van azd deploy.

Verwachte uitvoer

Met azd init de opdracht wordt uitvoer weergegeven die vergelijkbaar is met de volgende regels:

Initializing an app to run on Azure (azd init)

? Enter a unique environment name: [? for help] <environment-name>

? Enter a unique environment name: <environment-name>

SUCCESS: Initialized environment <environment-name>.

Met azd up de opdracht wordt uitvoer weergegeven die vergelijkbaar is met de volgende regels:

? Select an Azure Subscription to use:  3. <subscription-name> (aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e)
? Enter a value for the 'location' infrastructure parameter: 51. (US) East US 2 (eastus2)

Packaging services (azd package)

  (✓) Done: Packaging service checkout
  - Container: pubsub-dapr-csharp-servicebus/checkout-<environment-name>:azd-deploy-1764796559


  (✓) Done: Packaging service orders
  - Container: pubsub-dapr-csharp-servicebus/orders-<environment-name>:azd-deploy-1764796569


Provisioning Azure resources (azd provision)
Provisioning Azure resources can take some time.

Subscription: <subscription-name> (aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e)
Location: East US 2

  You can view detailed progress in the Azure Portal:
  https://portal.azure.com/#view/HubsExtension/DeploymentDetailsBlade/~/overview/id/%2Fsubscriptions%2Faaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e%2Fproviders%2FMicrosoft.Resources%2Fdeployments%2F<environment-name>-1764796579

  (✓) Done: Resource group: rg-<environment-name> (1.727s)
  (✓) Done: Service Bus Namespace: sb-a1bc2de3fh4ij (18.228s)
  (✓) Done: Log Analytics workspace: log-a1bc2de3fh4ij (23.214s)
  (✓) Done: Application Insights: appi-a1bc2de3fh4ij (1.006s)
  (✓) Done: Portal dashboard: dash-a1bc2de3fh4ij (2.077s)
  (✓) Done: Container Registry: cra1bc2de3fh4ij (18.492s)
  (✓) Done: Container Apps Environment: cae-a1bc2de3fh4ij (1m53.753s)
  (✓) Done: Container App: ca-orders-a1bc2de3fh4ij (40.053s)
  (✓) Done: Container App: ca-checkout-a1bc2de3fh4ij (29.412s)

Deploying services (azd deploy)

  (✓) Done: Deploying service checkout

  (✓) Done: Deploying service orders
  - Endpoint: https://ca-orders-a1bc2de3fh4ij.whitecoast-c2de3fh4.eastus2.azurecontainerapps.io/


SUCCESS: Your up workflow to provision and deploy to Azure completed in 6 minutes 15 seconds.

Geslaagde implementatie bevestigen

Voer de volgende stappen uit om te controleren of de checkout service berichten publiceert naar het Service Bus-onderwerp en of de order-processor service de berichten ontvangt.

  1. Kopieer de naam van de checkout container-app uit de terminaluitvoer.

  2. Meld u aan bij Azure Portal en zoek op naam naar de container-app-resource.

  3. Selecteer bewakingslogboekstream> in het Container Apps-dashboard.

    Schermopname van de Azure-portal. In het zijpaneel onder Bewaking is Logstream gemarkeerd.

  4. Selecteer uitchecken op de pagina Logboekstream naast Container.

    Schermopname van de pagina Logboekstream voor de checkout-container-app. Boven de logboekstream, in de containerlijst, is checkout gemarkeerd.

  5. Controleer of de checkout container dezelfde uitvoer aanmeldt als in de terminal eerder.

    Connecting to stream...
    2025-12-03T21:22:38.59199  Connecting to the container 'checkout'...
    
    2025-12-03T21:22:38.61294  Successfully Connected to container: 'checkout' [Revision: 'ca-checkout-a1bc2de3fh4ij--azd-1010101010', Replica: 'ca-checkout-a1bc2de3fh4ij--azd-1010101010-e3fh4ij5kl-6mn7o']
    2025-12-03T21:22:25.764173919Z Published data: Order { OrderId = 1 }
    2025-12-03T21:22:26.775186594Z Published data: Order { OrderId = 2 }
    2025-12-03T21:22:27.785402134Z Published data: Order { OrderId = 3 }
    2025-12-03T21:22:28.795885226Z Published data: Order { OrderId = 4 }
    2025-12-03T21:22:29.818661172Z Published data: Order { OrderId = 5 }
    2025-12-03T21:22:30.833916028Z Published data: Order { OrderId = 6 }
    2025-12-03T21:22:31.847722919Z Published data: Order { OrderId = 7 }
    2025-12-03T21:22:32.858583147Z Published data: Order { OrderId = 8 }
    2025-12-03T21:22:33.868997259Z Published data: Order { OrderId = 9 }
    2025-12-03T21:22:34.879750628Z Published data: Order { OrderId = 10 }
    2025-12-03T21:22:35.889718195Z Published data: Order { OrderId = 11 }
    2025-12-03T21:22:36.905244880Z Published data: Order { OrderId = 12 }
    2025-12-03T21:22:37.915565325Z Published data: Order { OrderId = 13 }
    2025-12-03T21:22:38.926142458Z Published data: Order { OrderId = 14 }
    2025-12-03T21:22:39.937747578Z Published data: Order { OrderId = 15 }
    2025-12-03T21:22:40.952842205Z Published data: Order { OrderId = 16 }
    2025-12-03T21:22:41.964924464Z Published data: Order { OrderId = 17 }
    2025-12-03T21:22:42.974247022Z Published data: Order { OrderId = 18 }
    2025-12-03T21:22:43.988211319Z Published data: Order { OrderId = 19 }
    2025-12-03T21:22:44.997345767Z Published data: Order { OrderId = 20 }
    
  6. Doe hetzelfde voor de order-processor service.

    Connecting to stream...
    2025-12-03T21:23:11.36616  Connecting to the container 'orders'...
    
    2025-12-03T21:23:11.38606  Successfully Connected to container: 'orders' [Revision: 'ca-orders-h4ij5kl6mn7op--azd-1010101010', Replica: 'ca-orders-h4ij5kl6mn7op--azd-1010101010-8qr9st0uv1-wx2yz']
    2025-12-03T21:22:56.016634660Z Subscriber received : Order { OrderId = 1 }
    2025-12-03T21:22:57.092104858Z Subscriber received : Order { OrderId = 2 }
    2025-12-03T21:22:58.037571888Z Subscriber received : Order { OrderId = 3 }
    2025-12-03T21:22:59.047149782Z Subscriber received : Order { OrderId = 4 }
    2025-12-03T21:23:00.057088303Z Subscriber received : Order { OrderId = 5 }
    2025-12-03T21:23:01.085777239Z Subscriber received : Order { OrderId = 6 }
    2025-12-03T21:23:02.083886674Z Subscriber received : Order { OrderId = 7 }
    2025-12-03T21:23:03.091921022Z Subscriber received : Order { OrderId = 8 }
    2025-12-03T21:23:04.120860392Z Subscriber received : Order { OrderId = 9 }
    2025-12-03T21:23:05.127930191Z Subscriber received : Order { OrderId = 10 }
    2025-12-03T21:23:06.137896372Z Subscriber received : Order { OrderId = 11 }
    2025-12-03T21:23:07.242953880Z Subscriber received : Order { OrderId = 12 }
    2025-12-03T21:23:08.255497831Z Subscriber received : Order { OrderId = 13 }
    2025-12-03T21:23:09.264101960Z Subscriber received : Order { OrderId = 14 }
    2025-12-03T21:23:10.278569058Z Subscriber received : Order { OrderId = 15 }
    2025-12-03T21:23:11.297722094Z Subscriber received : Order { OrderId = 16 }
    2025-12-03T21:23:12.294944386Z Subscriber received : Order { OrderId = 17 }
    2025-12-03T21:23:13.306328648Z Subscriber received : Order { OrderId = 18 }
    2025-12-03T21:23:14.322317879Z Subscriber received : Order { OrderId = 19 }
    2025-12-03T21:23:15.076995284Z Subscriber received : Order { OrderId = 20 }
    

Inzicht in AZD up

Wanneer de azd up opdracht wordt uitgevoerd:

  • De Azure Developer CLI maakt de Azure-resources waarnaar wordt verwezen in de infra-directory van het voorbeeldproject in het Azure-abonnement dat u opgeeft. U vindt deze Azure-resources in Azure Portal.
  • De app wordt geïmplementeerd in Container Apps. In Azure Portal hebt u toegang tot de volledig functionele app.

Resources opschonen

Als u deze toepassing niet meer gaat gebruiken, gebruikt u de volgende opdracht om de Azure-resources te verwijderen die u hebt gemaakt:

azd down