基于 Pulsar 获取消息推送(Node.js SDK)

更新时间:2024-06-20 06:08:38下载pdf

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

前提条件

操作实践

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

第一步:下载 Demo 源码

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

第二步:配置测试环境

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

    基于 Pulsar 获取消息推送(Node.js SDK)

  2. 添加依赖环境

    • crypto-js: 4.0.0 及以上版本

    • ws: 7.4.5 及以上版本

      基于 Pulsar 获取消息推送(Node.js SDK)

第三步:配置项目参数

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

const client = new TuyaWebsocket({
  accessId: "xt*****ff**n1****8ufo",
  accessKey: "479bcb7345******582d9c******4ef7",
  url: TuyaWebsocket.URL.CN,
  env: TuyaWebsocket.env.TEST, //测试通道
  maxRetryTimes: 50,
});

参数说明如下:

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

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

  • url:根据调用的区域进行选择,具体参数可查看 src/config.ts

    • TuyaWebsocket.URL.CN(中国数据中心):wss://mqe.tuyacn.com:8285/
    • TuyaWebsocket.URL.US(美西数据中心):wss://mqe.tuyaus.com:8285/
    • TuyaWebsocket.URL.EU(中欧数据中心):wss://mqe.tuyaeu.com:8285/
    • TuyaWebsocket.URL.IN(印度数据中心):wss://mqe.tuyain.com:8285/
  • env:消息订阅通道

    • TuyaWebsocket.env.PROD:正式环境
    • TuyaWebsocket.env.TEST:测试环境
  • maxRetryTimes:最大重连次数

    说明: env 中 TEST 代表测试环境。PROD 代表正式环境。

    基于 Pulsar 获取消息推送(Node.js SDK)

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

  1. 配置测试设备。

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

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

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

  2. 在开发工具 WebStorm 上,打开终端 Terminal ,执行 yarn 代码

    1. yarn

    2. yarn example

    3. 执行结果:

      even@MacBook-Air message-subscription-websocket-master % yarn
      yarn install v1.22.11
      [1/4] 🔍  Resolving packages...
      success Already up-to-date.
      $ husky install
      husky - not a Git repository, skipping hooks installation
      ✨  Done in 1.32s.
      even@MacBook-Air message-subscription-websocket-master % yarn example
      yarn run v1.22.11
      $ npm run build && node ./example/index.js
      npm WARN lifecycle The node binary used for scripts is /var/folders/jf/_0x1y81n67x979xf09m_cv580000gn/T/yarn--1630917003536-0.5926954827118307/node but npm is using /Users/even/.nvm/versions/node/v14.17.5/bin/node itself. Use the `--scripts-prepend-node-path` option to include the path for the node binary npm was executed with.
      
      > message-subscription-websocket@0.0.1 build /Users/even/Documents/SDK/Nodejs/message-subscription-websocket-master
      > tsc
      
      open
      

      基于 Pulsar 获取消息推送(Node.js SDK)

  3. 通过 App 端操作设备。

    1. 打开测试设备灯具的开关。
    2. 调整灯光亮度。
  4. 在开发工具 WebStorm 上自动获取到消息推送展示。
    基于 Pulsar 获取消息推送(Node.js SDK)

  5. 数据展示,字段含义请参见文档 消息格式

消息推送信息解析

开启灯

  • 接收的消息
INFO 1630917829404  receive msg, jsonMessage={"messageId":"CLe1/w4QACAA","payload":"eyJkYXRhIjoidUdtTE1YempLczJpT242eWJ6WTBIUk9yemlzYlpiVEJBakIxZnVTcHQzcmF3SXEybUcvZlpUZDlUQ2ltcXBHUHpRdGY5d0Zoa1NRNklCRTJQM3lZUGo2Q3JzcUZFUXZMOVBGZUhwRDlaOUthZHpuRndTUVg2c2dSYTJmMkFORkhEVEM4cFowK2ZMbldnZTdBcVBHNExkeG9iT1BDN2tOcGs5MmhtWGpCMFBFT1oyRHU0TWJQNE5TTjQ5UWNKNE1QRTJsU2hlQ01yZWw5QjE3VFQ4QTQwMFRsdjh5MG5sMDRaTXE1YStpbUxDdmpHSDV0YWxscEkxMFJaeG9mSjcyZiIsInByb3RvY29sIjo0LCJwdiI6IjIuMCIsInNpZ24iOiI5ZjRiNTY1YjY4YjA0ODk2ZWZhODE0MDhkOTQxYzY4NyIsInQiOjE2MzA5MTc1NzYwNDh9","properties":{},"publishTime":"2021-09-06T16:39:36.048+08:00","redeliveryCount":0,"key":"vdevo*******286991"}
  • 解析 payload 数据
the real message data: {
  payload: {
    data: {
      dataId: 'f73709fe-0eed-11ec-8511-024283c73485',
      devId: 'vdevo*******286991',
      productKey: 'na****z',
      status: [Array]
    },
    protocol: 4,
    pv: '2.0',
    sign: '9f4b565b68b04896efa81408d941c687',
    t: 1630917576048
  },
  messageId: 'CLe1/w4QACAA',
  properties: {},
  publishTime: '2021-09-06T16:39:36.048+08:00',
  redeliveryCount: 0,
  key: 'vdevo*******286991'
}

说明: payload 数据解析方法参见 数据签名。SDK 中已封装 payload 解密方法,具体请查看 src/utils.ts 文件。

调整灯光亮度

  • 接收的消息

    INFO 1630917829686  receive msg, jsonMessage={"messageId":"CLe1/w4QAyAA","payload":"eyJkYXRhIjoidEdHZUw4b0NYdXpZdlVnNytUKzlzVmZXUVowQXJuWVM0RlExd2R2a01oTGF3SXEybUcvZlpUZDlUQ2ltcXBHUHpRdGY5d0Zoa1NRNklCRTJQM3lZUGo2Q3JzcUZFUXZMOVBGZUhwRDlaOUthZHpuRndTUVg2c2dSYTJmMkFORkhEVEM4cFowK2ZMbldnZTdBcVBHNExTbFY0VkV2N050WjBUOXdzTTB4c1FlK0dkM2xjRFJqdG9Xa2VIVGFJaHZOUGluNDRBbTI2bTV1V0Z1L2R6a0xUd3hFNTlWdmg5S2tJOUpmTjR3ZTlXUzZycXVOWVJYcTNJN0hZRVBPeGY3OTNpajc5TUZHZUFEMWJLNHo1aWxHeG9vUlRsQjNNdVVFdXdWUmJOWlRJZnZ2YmNjWi9WUjdyOHRhQ3VuQ3QrbGJLVVl3clc1a2ZnZGxQUHlSY25HT013PT0iLCJwcm90b2NvbCI6NCwicHYiOiIyLjAiLCJzaWduIjoiYmEzZGE5NzcyNzBhOTRhOTQ3NmJhNmEzY2RlOWQ0ZTciLCJ0IjoxNjMwOTE3ODI5ODg1fQ==","properties":{},"publishTime":"2021-09-06T16:43:49.885+08:00","redeliveryCount":0,"key":"vdevo*******286991"}
    
  • 解析 Data 数据

     the real message data: {
      payload: {
        data: {
          dataId: '8e8e7a0b-0eee-11ec-8511-024283c73485',
          devId: 'vdevo*******286991',
          productKey: 'na****jz',
          status: [Array]
        },
        protocol: 4,
        pv: '2.0',
        sign: 'ba3da977270a94a9476ba6a3cde9d4e7',
        t: 1630917829885
      },
      messageId: 'CLe1/w4QAyAA',
      properties: {},
      publishTime: '2021-09-06T16:43:49.885+08:00',
      redeliveryCount: 0,
      key: 'vdevo*******286991'
    }