你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Dapr 开发与 MQTT 代理通信的分散式应用程序工作负载
若要使用 MQTT 代理 Dapr 可插入组件,请将发布/订阅组件和状态存储组件与 Dapr 应用程序一起部署在应用程序部署中。 本指南介绍如何使用 Dapr SDK 和 MQTT 代理可插入组件部署应用程序。
先决条件
- 已部署 Azure IoT 操作 - 快速入门:使用 K3s 在 GitHub Codespaces 中运行 Azure IoT 操作
- 已部署 MQTT 代理 Dapr 组件 - 部署 MQTT 代理 Dapr 组件
创建 Dapr 应用程序
生成应用程序
第一步是编写一个使用 Dapr SDK 进行发布/订阅或进行状态管理的应用程序。
打包应用程序
编写完 Dapr 应用程序后,生成容器:
运行以下命令,将应用程序打包到容器中:
docker build . -t my-dapr-app
将其推送到所选容器注册表,例如:
部署 Dapr 应用程序
以下“部署”定义包含用于 SAT 身份验证和 TLS 证书链的卷,以及利用 Dapr sidecar 注入自动将可插入组件添加到 Pod。
以下定义组件可能需要对特定应用程序进行自定义:
组件 说明 template:metadata:annotations:dapr.io/inject-pluggable-components
允许将 IoT 操作可插入组件自动注入到 pod 中 template:metadata:annotations:dapr.io/app-port
告知 Dapr 你的应用程序正在侦听的端口。 如果你的应用程序未使用此功能(如 pubsub 订阅),请移除此行 volumes:mqtt-client-token
用于对 Dapr 可插入组件与 MQTT 代理之间的通信进行身份验证的系统身份验证令牌 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 生成事件驱动应用。