共用方式為


使用 Dapr 開發與 MQTT 代理程式交談的分散式應用程式工作負載

若要使用 MQTT 代理程式插入式元件,請將發佈/訂閱和狀態存放區元件與 Dapr 應用程式一同部署於應用程式中。 本指南將說明如何使用 Dapr SDK 與 MQTT 代理程式插入式元件部署應用程式。

必要條件

建立 Dapr 應用程式

建置應用程式

第一個步驟為撰寫使用 Dapr SDK 發佈/訂閱或執行狀態管理的應用程式。

封裝應用程式

Dapr 應用程式撰寫完成後,請建置容器:

  1. 使用下列命令將應用程式封裝成容器:

    docker build . -t my-dapr-app
    
  2. 將其推送至您選擇的容器登錄,如:

部署 Dapr 應用程式

下列 部署 定義包含 SAT 驗證和 TLS 憑證鏈結的磁碟區,並利用 Dapr 側車插入自動將插入式元件新增至 Pod。

下列定義元件可能需要自訂您的特定應用程式:

元件 描述
template:metadata:annotations:dapr.io/inject-pluggable-components 允許IoT作業插入式元件 自動插入 Pod
template:metadata:annotations:dapr.io/app-port 告知 Dapr 您的應用程式正在接聽哪個埠。 如果您的應用程式未使用此功能(例如 pubsub 訂用帳戶),請移除這一行
volumes:mqtt-client-token 用於向 MQTT 代理程式驗證 Dapr 插入式元件的系統驗證權杖
volumes:aio-ca-trust-bundle 驗證 MQTT 訊息代理程式 TLS 憑證的信任鏈結。根據預設,會使用 Azure IoT 操作部署的測試憑證
containers:name 指定給應用程式容器的名稱
containers:image 您想要部署的應用程式容器

警告

如果您的 Dapr 應用程式未接聽來自 Dapr Sidecar 的流量,則移除 dapr.io/app-portdapr.io/app-protocol 註釋 ,否則 Dapr Sidecar 將無法初始化。

  1. 將下列 yaml 儲存到名為 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. 執行下列命令來部署容器:

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

    Pod 應該報告在短間隔后執行的三個容器,如下列範例輸出所示:

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

疑難排解

如果應用程式未啟動,或您看到處於狀態的容器 CrashLoopBackoff ,容器的 daprd 記錄通常包含有用的資訊。

執行下列命令以檢視 daprd 元件的記錄:

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

下一步

瞭解如何開發 Dapr 應用程式後,即可透過本教學課程使用 Dapr 建置事件驅動應用程式