你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Dapr 开发与 MQTT 代理通信的分散式应用程序工作负载

若要使用 MQTT 代理 Dapr 可插入组件,请将发布/订阅组件和状态存储组件与 Dapr 应用程序一起部署在应用程序部署中。 本指南介绍如何使用 Dapr SDK 和 MQTT 代理可插入组件部署应用程序。

先决条件

创建 Dapr 应用程序

生成应用程序

第一步是编写一个使用 Dapr SDK 进行发布/订阅或进行状态管理的应用程序。

打包应用程序

编写完 Dapr 应用程序后,生成容器:

  1. 运行以下命令,将应用程序打包到容器中:

    docker build . -t my-dapr-app
    
  2. 将其推送到所选容器注册表,例如:

部署 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-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 生成事件驱动应用