使用 Dapr 開發與 MQTT 代理程式交談的分散式應用程式工作負載
若要使用 MQTT 代理程式插入式元件,請將發佈/訂閱和狀態存放區元件與 Dapr 應用程式一同部署於應用程式中。 本指南將說明如何使用 Dapr SDK 與 MQTT 代理程式插入式元件部署應用程式。
必要條件
- 部署的 Azure IoT 作業 - 快速入門:使用 K3 在 GitHub Codespaces 中執行 Azure IoT 作業
- 已部署 MQTT 代理程式 Dapr 元件 - 部署 MQTT 代理程式 Dapr 元件
建立 Dapr 應用程式
建置應用程式
第一個步驟為撰寫使用 Dapr SDK 發佈/訂閱或執行狀態管理的應用程式。
封裝應用程式
Dapr 應用程式撰寫完成後,請建置容器:
使用下列命令將應用程式封裝成容器:
docker build . -t my-dapr-app
將其推送至您選擇的容器登錄,如:
部署 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-port
和 dapr.io/app-protocol
註釋 ,否則 Dapr Sidecar 將無法初始化。
將下列 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>
執行下列命令來部署容器:
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 建置事件驅動應用程式。