• 测试前准备
  • 操作流程
  • Remote 模块消息远程同步
    • 通过MQTT.fx与Baidu IoT Hub建立连接
    • 通过MQTTBOX与本地Hub模块建立连接
    • Remote 消息远程同步
      • MQTT.fx发布消息,MQTTBOX接收消息
      • MQTTBOX发布消息,MQTT.fx接收消息

    测试前准备

    声明

    - 本文测试所用设备系统为MacOS- 模拟MQTT client行为的客户端为MQTTBOX和MQTT.fx- 本文所用镜像为依赖OpenEdge源码自行编译所得,具体请查看如何从源码构建镜像- 远程Hub接入平台选用Baidu IoT Hub

    Remote远程服务模块是为了满足物联网场景下另外一种用户需求而研发,能够实现本地Hub与远程MQTT服务(如Azure IoT Hub、AWS IoT Core、Baidu IoT Hub等)的数据同步。即通过Remote远程服务模块我们既可以从远程Hub订阅消息到本地Hub,也可以将本地Hub的消息发送给远程Hub,完整的配置可参考远程服务模块配置。

    操作流程

    • Step1:依据Baidu IoT Hub的操作规章,在Baidu IoT Hub创建测试所用的endpoint、user、principal(身份)、policy(主题权限策略)等信息;
    • Step2:依据步骤Step1中创建的连接信息,选择MQTT.fx作为测试用MQTT client客户端,配置相关连接信息,并将之与Baidu IoT Hub建立连接,并订阅既定主题;
      • 若成功建立连接,则继续下一步操作;
      • 若未成功建立连接,则重复上述步骤,直至看到MQTT.fx与Baidu IoT Hub成功建立连接。
    • Step3:打开终端,进入OpenEdge程序包目录,然后以Docker容器模式启动OpenEdge可执行程序,并观察Hub模块、Remote模块启动状态;
      • 若Hub、Remote模块成功启动,则继续下一步操作;
      • 若Hub、Remote模块未成功启动,则重复Step3,直至看到Hub、Remote模块成功启动。
    • Step4:选择MQTTBOX作为测试用MQTT client客户端,与Hub建立连接,并订阅既定主题;
      • 若成功与Hub模块建立连接,则继续下一步操作;
      • 若与Hub建立连接失败,则重复Step4操作,直至MQTTBOX与本地Hub成功建立连接。
    • Step5:依据Remote模块的相关配置信息,从MQTTBOX向既定主题发布消息,观察MQTT.fx的消息接收情况;同理,从MQTT.fx向既定主题发布消息,观察MQTTBOX的消息接收情况。
    • Step6:若Step5中双方均能接收到对方发布的消息内容,则表明功能测试顺利通过。
      上述操作流程相关的流程示意图具体如下图示。

    使用函数计算进行消息处理

    Remote 模块消息远程同步

    首先,需要说明的是,本次通过OpenEdge Remote远程服务模块实现消息远程同步所依赖的主题信息如下所示。

    1. name: openedge-remote-mqtt
    2. hub:
    3. address: tcp://openedge-hub:1883
    4. username: test
    5. password: hahaha
    6. remotes:
    7. - name: remote
    8. address: tcp://u4u6zk2.mqtt.iot.bj.baidubce.com:1883
    9. clientid: 349360d3c91a4c55a57139e9085e526f
    10. username: u4u6zk2/demo
    11. password: XqySIYMBsjK0JkEh
    12. rules:
    13. - id: rule-rcg3k6ytq
    14. hub:
    15. subscriptions:
    16. - topic: t1
    17. qos: 1
    18. remote:
    19. name: remote
    20. subscriptions:
    21. - topic: t2
    22. qos: 1

    依据上述Remote模块的配置信息,意即Remote模块向本地Hub模块订阅主题“t1”的消息,向Baidu IoT Hub订阅主题“t2”的消息;当MQTTBOX向主题“t1”发布消息时,当Hub模块接收到主题“t1”的消息后,将其转发给Remote模块,再由Remote模块降之转发给Baidu IoT Hub,这样如果MQTT.fx订阅了主题“t1”,即会收到该条从MQTTBOX发布的消息;同理,当MQTT.fx向主题“t2”发布消息时,Baidu IoT Hub会将消息转发给Remote模块,由Remote模块将之转发给本地Hub模块,这样如果MQTTBOX订阅了主题“t2”,即会收到该消息。

    简单来说,由MQTT.fx发布的消息,到MQTTBOX接收到该消息,流经的路径信息为:

    MQTT.fx -> Remote Hub -> MQTT Remote Module -> Local Hub Module -> MQTTBOX

    同样,由MQTTBOX发布的消息,到MQTT.fx接收到该消息,流经的路径信息为:

    MQTTBOX -> Local Hub Module -> MQTT Remote Module -> Remote Hub -> MQTT.fx

    通过MQTT.fx与Baidu IoT Hub建立连接

    Step1、Step2所述,通过MQTT.fx与Baidu IoT Hub建立连接,涉及的通过云端Baidu IoT Hub场景的endpoint等相关信息,及MQTT.fx连接配置信息分别如下图示。

    基于Baidu IoT Hub创建的endpoint

    基于Baidu IoT Hub创建的endpoint下属设备信息

    用于连接Baidu IoT Hub的MQTT.fx配置信息

    完成连接信息的相关配置工作后,点击“OK”或“Apply”按钮使配置信息生效,然后在MQTT.fx连接操作页面点击“Connect”按钮,通过按钮的“颜色”即可判断MQTT.fx是否已与Baidu IoT Hub建立连接,成功建立连接的状态如下图示。

    MQTT.fx成功与Baidu IoT Hub建立连接

    从上图不难发现,与Baidu IoT Hub成功建立连接后,右上方指示灯变为“绿色”,同时“Connect”连接按钮变得“灰暗且不可点击”。

    在建立连接后,切换至“Subscribe”页面,依据既定配置,订阅相应主题“t1”,成功订阅的状态如下图示。

    MQTT.fx成功订阅主题t1

    通过MQTTBOX与本地Hub模块建立连接

    依据步骤Step3所述,调整OpenEdge主程序启动加载配置项,这里,要求OpenEdge启动后加载Hub、Remote模块,成功加载的状态如下图示。

    OpenEdge成功加载Hub、Remote

    此外,亦可通过执行命令docker ps查看系统当前正在运行的docker容器列表,具体如下图示。

    通过命令docker ps查看系统当前正在运行的docker容器列表

    成功启动OpenEdge后,依据使用Hub进行设备接入,通过MQTTBOX成功与Hub模块建立连接,并订阅主题“t2”,成功订阅的状态如下图示。

    MQTTBOX成功订阅主题t2

    Remote 消息远程同步

    这里,将分别以MQTT.fx、MQTTBOX作为消息发布方,另一方作为消息接收方进行测试。

    MQTT.fx发布消息,MQTTBOX接收消息

    首先,通过MQTT.fx向主题“t2”发布消息“This message is from MQTT.fx.”,具体如下图示。

    通过MQTT.fx向主题t2发布消息

    同时,观察MQTTBOX在订阅主题“t2”的消息接收状态,具体如下图示。

    MQTTBOX成功收到消息

    MQTTBOX发布消息,MQTT.fx接收消息

    同理,通过MQTTBOX作为发布端向主题“t1”发布消息“This message is from MQTTBOX.”,具体如下图示。

    通过MQTTBOX向主题t1发布消息

    同时,观察MQTT.fx在订阅主题“t1”的消息接收状态,具体如下图示。

    MQTT.fx成功收到消息

    综上,MQTT.fx与MQTTBOX均已正确接收到了对应的消息,且内容吻合。至此,关于基于Remote模块实现消息远程同步的介绍就结束了。

    最后更新于 2018-12-28 10:23:09

    原文: https://openedge.tech/docs/tutorials/local/Message-synchronize-with-iothub-whith-remote-module