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

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

云项目中提供消息订阅功能,当项目中的设备相关状态发生变化时(如设备注册、设备数据上报、设备离线等),开放消息平台通过 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务必修改为私有云对应域名地址

  • env:消息订阅通道

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

    envTEST 代表测试环境,PROD 代表正式环境。

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

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

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

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