基于 Pulsar 获取消息推送(Python SDK)

更新时间:2024-09-10 01:49:13

云项目中提供消息订阅功能,当项目中的设备相关状态发生变化时(如设备注册、设备数据上报、设备离线等),开放消息平台通过 Pulsar 主动推送各种事件数据给外部合作伙伴,以满足合作伙伴对消息实时性和消息持久化的要求。

前提条件

  • 已完成项目创建。项目创建方法参考 快速入门

操作实践

目前涂鸦基于开源的 Pulsar 系统进行了定制改进,并提供 Python 版本 Pulsar SDK
本文通过使用 Python 开发工具 PyCharm 进行消息接收实践。

第一步:下载 Demo 源码

单击下载 Pulsar SDK 源码,下载 Zip 包至本地,解压缩即可。

第二步:配置测试环境

  1. PyCharm 打开源码工程:单击 Open ,查找到上一步下载的解压缩后文件。

    基于 Pulsar 获取消息推送(Python SDK)

  2. 添加依赖环境。

    1. py2 版本依赖

      • websocket-client version 0.59.0
      • pycrypto version 2.6.1
    2. py3 版本依赖

      • websocket-client version 1.0.1
      • pycrypto version 2.6.1

      本文所使用的电脑安装的 Python 版本为 3.8。

      基于 Pulsar 获取消息推送(Python SDK)

  3. 查看依赖包。

    单击顶部导航条 PyCharm > Preferences,选择 Project:python > Python Interpreter,查看本项目环境。

    基于 Pulsar 获取消息推送(Python SDK)

第三步:配置项目参数

修改事例代码 example/index.js 文件参数。本文以 测试通道 为例做展示。

# accessId, accessKey,serverUrl,MQ_ENV
ACCESS_ID = "xt*****ff**n1****8ufo"
ACCESS_KEY = "479bcb7345******582d9c******4ef7"
WSS_SERVER_URL = "wss://mqe.tuyacn.com:8285/"
MQ_ENV = MQ_ENV_PROD

参数说明如下:

  • ACCESS_ID:填写云开发平台中 API 授权密钥的 Access ID。

  • ACCESS_KEY:填写云开发平台中 API 授权密钥的 Access Secret。

  • WSS_SERVER_URL务必修改为私有云对应域名地址

  • MQ_ENV:消息订阅通道

    • MQ_ENV_PROD:正式环境
    • MQ_ENV_TEST:测试环境

    MQ_ENVMQ_ENV_TEST 代表测试环境。MQ_ENV_PROD 代表正式环境。

    基于 Pulsar 获取消息推送(Python SDK)

第四步:App 端操作设备,测试环境消息接收

  1. 测试设备所上报的消息会发送至测试通道,以方便您进行设备功能调试。

  2. 在开发工具 PyCharm 上,选中 pythonWssConsumerDemo.py 文件,右键单击 ,并执行 RUN

    基于 Pulsar 获取消息推送(Python SDK)

  3. 通过 App 端操作设备。

    1. 打开测试设备灯具的开关。
    2. 调整灯光亮度。
  4. 在开发工具 PyCharm 上自动获取到消息推送展示。

    基于 Pulsar 获取消息推送(Python SDK)

  5. 数据展示。字段含义请参考文档 消息类型

消息推送信息解析

开启灯

  • 接收的消息

    received message origin payload: {"data":"5dBU8WiRS1+zydoFTtaVKuL+DnRGSSj1VvrRH4pN1kvawIq2mG/fZTd9TCimqpGPzQtf9wFhkSQ6IBE2P3yYPj6CrsqFEQvL9PFeHpD9Z9KadznFwSQX6sgRa2f2ANFHDTC8pZ0+fLnWge7AqPG4LdxobOPC7kNpk92hmXjB0PEOZ2Du4MbP4NSN49QcJ4MPoKVOkbMxkxYUbynUW5fQ6FgHYZYcTUp+a0vF/oS3VL3jGH5tallpI10RZxofJ72f","protocol":4,"pv":"2.0","sign":"b8a548131304b49b524fca193f9ffd63","t":1630979005761}
    
  • 解析 payload 数据

    decryptContentData={"dataId":"fe3a7d80-0f7c-11ec-8511-024283c73485","devId":"vdev******86991","productKey":"na****jz","status":[{"1":"true","code":"switch_led","t":1630979005725,"value":true}]}
    

    payload 数据解析方法参考 数据签名。SDK 中已封装 payload 解密方法。

调整灯光亮度

  • 接收的消息

    received message origin payload: {"data":"z/xrNsO26LmxprqP0OaMSXdSXy2jAEiz0blUCnlUZe7awIq2mG/fZTd9TCimqpGPzQtf9wFhkSQ6IBE2P3yYPj6CrsqFEQvL9PFeHpD9Z9KadznFwSQX6sgRa2f2ANFHDTC8pZ0+fLnWge7AqPG4LSlV4VEv7NtZ0T9wsM0xsQe+Gd3lcDRjtoWkeHTaIhvNzw8Y01IymwbZVRlVvpO3bLeIRohJoYtnI0lpflt6tcoKE7H3tlNNyLhx/y903ldy7z0o3iD5KROUiGtsAvdO0WfAsVxl87x4EbH6A7FLPOR2vyfiUckMP3+KlQR/CA6UtuuExvaaSNCeSx8NL2Rpmw==","protocol":4,"pv":"2.0","sign":"7ce23e6fb11386020cc4a58524cf2a4e","t":1630979195061}
    
  • 解析 Data 数据

    decryptContentData={"dataId":"6f0f12a7-0f7d-11ec-8511-024283c73485","devId":"vdev******86991","productKey":"na****jz","status":[{"2":"white","code":"work_mode","t":1630979195023,"value":"white"},{"3":"764","code":"bright_value_v2","t":1630979195023,"value":764}]}