Condividi tramite


Usare Dapr per sviluppare carichi di lavoro di applicazioni distribuite che comunicano con il broker MQTT

Per usare i componenti collegabili di Dapr per il broker MQTT, distribuire entrambi i componenti di pubblicazione/sottoscrizione e di archiviazione stati nella distribuzione dell'applicazione insieme all'applicazione Dapr. Questa guida illustra come distribuire un'applicazione usando i componenti collegabili Dapr SDK e broker MQTT.

Prerequisiti

Creazione di un'applicazione Dapr

Compilazione dell'applicazione

Il primo passaggio consiste nello scrivere un'applicazione che usa un SDK Dapr per pubblicare/sottoscrivere o eseguire la gestione dello stato.

Creare il pacchetto dell'applicazione

Dopo aver terminato di scrivere l'applicazione Dapr, compilare il contenitore:

  1. Creare un pacchetto dell'applicazione in un contenitore con il comando seguente:

    docker build . -t my-dapr-app
    
  2. Eseguirne il push nel registro contenitori preferito, ad esempio:

Distribuire un'applicazione Dapr

La definizione di distribuzione seguente contiene volumi per l'autenticazione SAT e la catena di certificati TLS e usa l'inserimento sidecar dapr per aggiungere automaticamente i componenti collegabili al pod.

I componenti di definizione seguenti potrebbero richiedere la personalizzazione per l'applicazione specifica:

Componente Descrizione
template:metadata:annotations:dapr.io/inject-pluggable-components Consente l'inserimento automatico dei componenti collegabili alle operazioni IoT nel pod
template:metadata:annotations:dapr.io/app-port Indica a Dapr la porta su cui è in ascolto l'applicazione. Se l'applicazione non usa questa funzionalità (ad esempio una sottoscrizione pubsub), rimuovere questa riga
volumes:mqtt-client-token Token di autenticazione di sistema usato per autenticare i componenti collegabili Dapr con il broker MQTT
volumes:aio-ca-trust-bundle Catena di attendibilità per convalidare il certificato TLS del broker MQTT. Il valore predefinito è il certificato di test distribuito con Operazioni di Azure IoT
containers:name Nome assegnato al contenitore dell'applicazione
containers:image Contenitore dell'applicazione da distribuire

Attenzione

Se l'applicazione Dapr non è in ascolto del traffico dal sidecar Dapr, rimuovere le dapr.io/app-port annotazioni e dapr.io/app-protocol in caso contrario il sidecar Dapr non riuscirà a inizializzare.

  1. Salvare il codice YAML seguente in un file denominato dapr-app.yaml:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: dapr-client
      namespace: azure-iot-operations
      annotations:
        aio-broker-auth/group: dapr-workload
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-dapr-app
      namespace: azure-iot-operations
    spec:
      selector:
        matchLabels:
          app: my-dapr-app
      template:
        metadata:
          labels:
            app: my-dapr-app
          annotations:
            dapr.io/enabled: "true"
            dapr.io/inject-pluggable-components: "true"
            dapr.io/app-id: "my-dapr-app"
            dapr.io/app-port: "6001"
            dapr.io/app-protocol: "grpc"
        spec:
          serviceAccountName: dapr-client
    
          volumes:
          # SAT used to authenticate between Dapr and the MQTT broker
          - name: mqtt-client-token
            projected:
              sources:
                - serviceAccountToken:
                    path: mqtt-client-token
                    audience: aio-internal
                    expirationSeconds: 86400
    
          # Certificate chain for Dapr to validate the MQTT broker
          - name: aio-ca-trust-bundle
            configMap:
              name: azure-iot-operations-aio-ca-trust-bundle
    
          containers:
          # Container for the Dapr application 
          - name: mq-dapr-app
            image: <YOUR_DAPR_APPLICATION>
    
  2. Distribuire il componente eseguendo il comando seguente:

    kubectl apply -f dapr-app.yaml
    kubectl get pods -w
    

    Il pod deve segnalare tre contenitori in esecuzione dopo un breve intervallo, come illustrato nell'output di esempio seguente:

    NAME                          READY   STATUS              RESTARTS   AGE
    ...
    my-dapr-app                   3/3     Running             0          30s
    

Risoluzione dei problemi

Se l'applicazione non viene avviata o viene visualizzato lo stato dei contenitori CrashLoopBackoff , il log per il daprd contenitore spesso contiene informazioni utili.

Eseguire il comando seguente per visualizzare i log per il componente daprd:

kubectl logs -l app=my-dapr-app -c daprd

Passaggi successivi

Dopo avere appreso come sviluppare un'applicazione Dapr, è possibile seguire l'esercitazione per creare un'app guidata dagli eventi con Dapr.