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

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

更新时间:2023-08-28 07:53:13下载pdf

涂鸦基于开源的 Pulsar 进行了定制改进,当项目中的设备相关状态发生变化时(如设备注册、设备数据上报、设备离线等),涂鸦会转发消息。方便您及时获取设备信息,并可以分析或存储这些信息。本文介绍如何使用涂鸦 Java 版本 Pulsar SDK 进行消息接收实践。

准备工作

  • 下载 GitHub 打开源码工程:Pulsar SDK
  • 安装开发环境:IntelliJ IDEA
  • 创建至少一个云项目。详细步骤请参考 管理项目
  • 开启 消息订阅。详细步骤请参考 管理订阅消息
  • 下载智能生活 App,用于接受测试消息。
  • 准备一个能连接涂鸦的智能设备,例如照明灯,并关联到云项目。具体步骤请参考 关联设备

第一步:配置开发环境

  1. 使用 IntelliJ IDEA 打开源码工程。

    单击 Open,查找到下载的 Pulsar SDK 解压缩后文件。

    基于 Pulsar 获取消息推送(Java SDK)
  2. 修改 open-mq-sdk/src/main/java/com.tuya.open.sdk/mq/MqConsumer.java 文件参数,修改 Java 工程为测试环境。具体参数说明可查看 mq/MqEnv.java 文件。

    private MqEnv    env = MqEnv.TEST;
    
    • MqEnv.TEST 代表测试环境。
    • MqEnv.PROD 代表正式环境。
    基于 Pulsar 获取消息推送(Java SDK)
  3. 修改 open-mq-sdk/src/main/java/com.tuya.open.sdk/example/ConsumerExample.java 文件参数。

    String url = MqConfigs.CN_SERVER_URL;
    String accessId = "xt*****ff**n1****8ufo";
    String accessKey = "479bcb7345******582d9c******4ef7";
    

    参数说明如下:

    参数 说明
    url 接入地址。根据调用的区域进行选择:
    • CN_SERVER_URL:中国区,pulsar+ssl://mqe.tuyacn.com:7285/
    • US_SERVER_URL:美国区,pulsar+ssl://mqe.tuyaus.com:7285/
    • EU_SERVER_URL:欧洲区,pulsar+ssl://mqe.tuyaeu.com:7285/
    • IND_SERVER_URL:印度区,pulsar+ssl://mqe.tuyain.com:7285/
    具体参数可查看 mq/MqConfigs.java
    accessId 填写 云项目 中 API 授权密钥的 Access ID。
    accessKey 填写云项目中 API 授权密钥的 Access Secret。
    基于 Pulsar 获取消息推送(Java SDK)

第二步:测试环境消息接收

  1. 配置测试设备。

    1. 在云项目的 消息订阅 页面,开启消息订阅。
      基于 Pulsar 获取消息推送(Java SDK)

    2. 待订阅状态显示 已开启 后,单击 测试环境 页签。

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

      基于 Pulsar 获取消息推送(Java SDK)
    4. 已关联的设备设置为测试设备后,测试设备所上报的消息会发送至测试通道,以方面您进行设备功能调试。

  2. 在开发工具 IntelliJ IDEA 上,右键单击 ConsumerExample.java 文件,选择 Run,执行该程序。

    基于 Pulsar 获取消息推送(Java SDK)
  3. 通过智能生活 App 操作设备。

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

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

第三步:解析推送信息

示例一:开启灯

  • 接收的消息

    Message received: {
        "data": "mT9eqNz5MCgibKjEC+zsikNpoukkmad6K/uS18FozRETIriMEApJBXXm5o37QmMFzQtf9wFhkSQ6IBE2P3yYPrgKoKYnbLa+mN1TUCda/JYJWG9dqUPOlAUjyey1/PKjWu8doYvgN8fCe0HIMZBTI1eVfe4RzVkEHvaaFLVF+lpfqGdvTWhlLNbh6092SG9MsR8Aq2sXHt2naIfIT36xYU9xPHy0C65K3HDuQgwi69fRWhXdA1LWvsKPavTOappD",
        "protocol": 4,
        "pv": "2.0",
        "sign": "d6be290bd0ffa196c313ecd315e6ff72",
        "t": 1622701486365
    }, seq = 0, time = 1622701486373, consumed time = 1622701486652
    

    拼接参数说明如下:

    • seq:获取此消息的队列 ID。
    • time:客户端发布此消息时间的时间戳。
    • consumed time:系统打印信息时间的时间戳。
  • 解析 Data 数据

    the real message data: {
        "dataId": "642769b3-c434-11eb-87b5-02425b0322e7",
        "devId": "vdevo162201920765824",
        "productKey": "atxdggtv9ddjt8xx",
        "status": [{
            "code": "switch_led",
            "t": 1622701486258,
            "value": true,
            "20": "true"
        }]
    }
    

    Data 数据解析方法参考 数据签名。SDK 中已封装 Data 解密方法,具体请查看 mq.AESBase64Utils.java 文件。

示例二:调整灯光亮度

  • 接收的消息

    Message received: {
        "data": "UoHAZ1lTSAZRr0HFrePEw/rsMDlKAOIDeSjFQbf35K4TIriMEApJBXXm5o37QmMFzQtf9wFhkSQ6IBE2P3yYPrgKoKYnbLa+mN1TUCda/JYJWG9dqUPOlAUjyey1/PKjWu8doYvgN8fCe0HIMZBTI1eVfe4RzVkEHvaaFLVF+loWkfytt13z5nHmD9EPdmOZOxGcbyvjGOOp9iQOA3Om2XPur4DMxX0M+V+fFkyD9OXFRR9d0DA6J4LHmvDBtfO3U4HBd5MyELCdYJR7B+jCuVAcflFEGZKfv+5vINIuDZu0q1Ono+G6AcEyfmhIjrrY8EpmfMW/mWvfgGAreIOThH5WroVQpgbzIDgcGsXAsW1zzZYe27YlWKXleLLBEBcQx6Y2gSutLqfsu0MA59GNtg==",
        "protocol": 4,
        "pv": "2.0",
        "sign": "f055d71c2caae3549a53adddde16aaec",
        "t": 1622701494099
    }, seq = 1, time = 1622701494099, consumed time = 1622701494059
    
  • 解析 Data 数据

    the real message data: {
        "dataId": "68ce83d2-c434-11eb-87b5-02425b0322e7",
        "devId": "vdevo162201920765824",
        "productKey": "atxdggtv9ddjt8xx",
        "status": [{
            "code": "control_data",
            "t": 1622701494064,
            "28": "100b00193020800000000",
            "value": "{\"bright\":0,
                          \"change_mode\":\"gradient\",
                          \"h\":176,
                          \"s\":403,
                          \"temperature\":0,
                          \"v\":520
                          }"
        }]
    }
    

常见问题

是否支持部分类型的信息转发接收?

目前消息订阅开启后,只支持全部消息类型的接收。

为什么无法接收设备信息?

排查步骤如下:

  1. 确认是否已开启消息订阅。
  2. 确认 Pulsar 客户端的环境配置。
  3. 确认设备是否添加至测试设备,而 Pulsar 为正式环境。

消息订阅如何收费?

通过消息转发量进行收费,具体可以参考 产品定价