• 通过 Hub 服务将设备接入 Baetyl
    • 操作流程
    • 连接测试
      • Baetyl 应用配置信息
      • Baetyl 启动

    通过 Hub 服务将设备接入 Baetyl

    声明

    • 本文测试所用设备系统为 Ubuntu 18.04
    • 模拟 MQTT Client 行为的客户端为 MQTT.fx 和 MQTTBox,其中 MQTT.fx 用于 TCP 和 SSL 连接方式的测试,MQTTBox 用于 WS(Websocket)连接方式的测试。Baetyl Hub 服务的完整的配置参考 Hub 服务配置。

    提示:Darwin 系统可以通过源码安装 Baetyl,可参考 源码安装 Baetyl。

    操作流程

    • 步骤一:安装 Baetyl,并导入示例配置包。参考 快速安装 Baetyl 进行操作;
    • 步骤二:依据测试需求修改导入的配置信息,执行 sudo systemctl start baetyl 以容器模式启动 Baetyl,然后执行 sudo systemctl status baetyl 来查看 Baetyl 是否正常运行。如果 Baetyl 已经启动,执行 sudo systemctl start baetyl 重启来加载新的配置。
    • 步骤三:依据选定的连接测试方式,对 MQTT Client 作相应配置;
      • 若采用 TCP 连接,则仅需配置用户名、密码(参见配置文件 principals 配置项 usernamepassword),并选定对应连接端口即可;
      • 若采用 SSL 证书认证,除选定所需的用户名外,还需选定 CA 证书以及由 CA 签发的客户端证书和私钥,依据对应的连接端口连接即可;
      • 若采用 WS 连接,与 TCP 连接配置一样,仅需配置用户名、密码、相应端口即可;
    • 步骤四:若上述步骤一切正常,操作无误,即可通过 Baetyl 日志或 MQTT Client 查看连接状态。

    连接测试

    依据 步骤一 导入示例配置包后,确认一下应用配置和 Hub 服务的配置。

    Baetyl 应用配置信息

    如果采用官方的安装方式,将 Baetyl 应用配置替换成如下配置:

    1. # /usr/local/var/db/baetyl/application.yml
    2. version: v0
    3. services:
    4. - name: localhub
    5. image: hub.baidubce.com/baetyl/baetyl-hub
    6. replica: 1
    7. ports:
    8. - 1883:1883
    9. - 8883:8883
    10. - 8080:8080
    11. mounts:
    12. - name: localhub-conf
    13. path: etc/baetyl
    14. readonly: true
    15. - name: localhub-cert
    16. path: var/db/baetyl/cert
    17. readonly: true
    18. - name: localhub-data
    19. path: var/db/baetyl/data
    20. - name: localhub-log
    21. path: var/log/baetyl
    22. volumes:
    23. - name: localhub-conf
    24. path: var/db/baetyl/localhub-conf
    25. - name: localhub-data
    26. path: var/db/baetyl/localhub-data
    27. - name: localhub-cert
    28. path: var/db/baetyl/localhub-cert-only-for-test
    29. - name: localhub-log
    30. path: var/db/baetyl/localhub-log

    Baetyl Hub 服务的配置替换成如下配置:

    1. # /usr/local/var/db/baetyl/localhub-conf/service.yml
    2. listen:
    3. - tcp://0.0.0.0:1883
    4. - ssl://0.0.0.0:8883
    5. - ws://0.0.0.0:8080/mqtt
    6. certificate:
    7. ca: var/db/baetyl/cert/ca.pem
    8. cert: var/db/baetyl/cert/server.pem
    9. key: var/db/baetyl/cert/server.key
    10. principals:
    11. - username: two-way-tls
    12. permissions:
    13. - action: 'pub'
    14. permit: ['tls/#']
    15. - action: 'sub'
    16. permit: ['tls/#']
    17. - username: test
    18. password: hahaha
    19. permissions:
    20. - action: 'pub'
    21. permit: ['#']
    22. - action: 'sub'
    23. permit: ['#']
    24. subscriptions:
    25. - source:
    26. topic: 't'
    27. target:
    28. topic: 't/topic'
    29. logger:
    30. path: var/log/baetyl/service.log
    31. level: 'debug'

    容器模式需要端口映射,允许外部通过端口来访问容器,对应的配置项为应用配置中的 ports 字段。

    如上所述,Hub 服务启动时会同时开启 1883、8883 以及 8080 端口,分别用作 TCP、SSL、WS(Websocket)等几种方式进行连接,下文将以 MQTTBox 和 MQTT.fx 作为 MQTT Client,测试他们分别在上述这几种连接方式下与 Baetyl 的连接情况,具体如下。

    Baetyl 启动

    依据 步骤二,执行 sudo systemctl start baetyl 以容器模式启动 Baetyl,如果 Baetyl 已经启动,执行 sudo systemctl restart baetyl 来重启。然后执行 sudo systemctl status baetyl 来查看 baetyl 是否正常运行。正常启动的情况如下图所示。

    ../_images/systemctl-status.pngBaetyl 状态

    提示:Darwin 系统通过源码安装 Baetyl,可执行 sudo baetyl start 以容器模式启动 Baetyl。

    查看 Baetyl 主程序的日志,执行 sudo tail -f /usr/local/var/log/baetyl/baetyl.log 显示如下:

    ../_images/master-start-log.pngBaetyl 启动

    可以看到,Baetyl 正常启动后,Hub 服务镜像已被加载。另外,亦可以通过命令 docker ps 查看系统当前正在运行的容器。

    ../_images/docker-ps.png查看系统当前正在运行的容器

    TCP 连接测试

    启动 MQTT.fx 客户端,进入 Edit Connection Profiles 页面,填写 Profile Name,依据 Baetyl Hub 服务启动的地址及端口,填写 Broker Address 和 Broker Port ,再结合 principals 配置项中的连接信息配置 User Credentials 中的 User Name 和 Password ,然后点击 Apply 按钮,即可完成 TCP 连接模式下 MQTT.fx 的连接配置,具体如下图示。

    ../_images/mqttbox-tcp-connect-config.pngTCP 连接测试配置

    然后关掉配置页面,选择刚才的 Profile Name 进行Connect,若连接配置信息与 Baetyl Hub 服务 principals 配置项中允许连接的权限信息匹配,即可看到连接成功的标志,具体如下图示。

    ../_images/mqttbox-tcp-connect-success.pngTCP 连接成功

    SSL 连接测试

    启动 MQTT.fx 客户端,进入 Edit Connection Profiles 页面,与 TCP 连接配置类似,填写相应的 Profile Name、Broker Address 和 Broker Port, 对于 SSL 连接方式,需填写 User Credentials 中的 User Name,同时配置 SSL 相关的设置,配置如图所示,然后点击 Apply 按钮,即可完成 SSL 连接模式下 MQTT.fx 的连接配置。

    ../_images/mqttbox-ssl-connect-config1.pngSSL 连接测试配置

    ../_images/mqttbox-ssl-connect-config2.pngSSL 连接测试配置

    然后关掉配置页面,选择刚才的 Profile Name 进行 Connect,若连接配置信息与 Baetyl Hub 服务 principals 配置项中允许连接的权限信息匹配,即可看到连接成功的标志,具体如下图示。

    ../_images/mqttbox-ssl-connect-success.pngSSL 连接成功

    WS(Websocket)连接测试

    启动 MQTTBox 客户端,进入 Client 创建页面,选择连接使用的协议为 ws,依据 Baetyl Hub 服务启动的地址及端口,再结合 principals 配置项中用户名、密码进行配置,然后点击 Save 按钮,即可完成 WS 连接模式下 MQTTBox 的连接配置,具体如下图示。

    ../_images/mqttbox-ws-connect-config.pngWS(Websocket)连接测试配置

    只要上述操作正确、无误,即可在 MQTTBox 看到与 Baetyl Hub 成功建立连接的标志,具体如下图示。

    ../_images/mqttbox-ws-connect-success.pngWS(Websocket)连接成功

    综上,我们通过 MQTT.fx 和 MQTTBox 顺利完成了与 Baetyl Hub 服务的连接测试,除此之外,我们还可以通过 Paho-MQTT 自己编写测试脚本与 Baetyl Hub 连接,具体参见相关资源下载。