涂鸦开发者平台云开发消息队列最佳实践基于 Pulsar 获取消息推送(Python SDK)

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

更新时间:2023-08-23 05:58:09

云项目中提供消息订阅功能,当项目中的设备相关状态发生变化时(如设备注册、设备数据上报、设备离线等),开放消息平台通过 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:根据调用的区域进行选择

    • 中国数据中心:wss://mqe.tuyacn.com:8285/
    • 美西数据中心:wss://mqe.tuyaus.com:8285/
    • 中欧数据中心:wss://mqe.tuyaeu.com:8285/
    • 印度数据中心:wss://mqe.tuyain.com:8285/
  • MQ_ENV:消息订阅通道

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

    说明: MQ_ENV 中 MQ_ENV_TEST 代表测试环境。MQ_ENV_PROD 代表正式环境。

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

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

  1. 配置测试设备。

    1. 消息订阅页面,待订阅状态 栏会显示 已订阅后,单击 消息测试 页签。基于 Pulsar 获取消息推送(Python SDK)

    2. 在搜索栏中输入已关联的设备 ID,单击放大镜按钮搜索后,单击选中设备。
      基于 Pulsar 获取消息推送(Python SDK)

    3. 已关联的设备设置为测试设备后,测试设备所上报的消息会发送至测试通道,以方便您进行设备功能调试。

  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}]}