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

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

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

前提条件

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

操作实践

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

第一步:下载 Demo 源码

单击进入 Pulsar SDK 下载地址,单击页面 Code,下载 Zip 包至本地,解压缩即可。

第二步:配置测试环境

  1. IntelliJ IDEA 打开源码工程: 单击 Open ,查找到上一步下载的解压缩后文件。
    基于 Pulsar 获取消息推送(Java SDK)

  2. 修改 open-mq-sdk/src/main/java/com.tuya.open.sdk/mq/MqConsumer.java 文件参数。修改 Java 工程为测试环境。

    private MqEnv	env = MqEnv.TEST;
    

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

    MqEnv.TEST 代表测试环境。MqEnv.PROD 代表正式环境。具体参数说明可查看 mq/MqEnv.java 文件。

第三步:配置项目参数

修改 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";

参数说明如下:

  • accessId:填写云开发平台中 API 授权密钥的 Access ID。
  • accessKey:填写云开发平台中 API 授权密钥的 Access Secret。
  • url:具体参数可查看 mq/MqConfigs.java务必修改为私有云对应域名地址

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

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

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

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

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

  3. 通过 App 端操作设备。

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

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

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

消息推送信息解析

开启灯

  • 接收的消息

    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:获取此消息的 Sequence 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
    		              }"
    	}]
    }
    

FAQ

  1. Q:消息订阅的使用场景是什么?
    A:当项目中的设备相关状态发生变化时,涂鸦会转发消息。方便客户及时获取设备信息,并可以分析或存储这些信息。
  2. Q:消息订阅是否支持部分类型的信息转发接收?
    A: 目前消息订阅开启后,只支持全部消息类型的接收。
  3. Q:为什么无法接收到设备信息?
    A: 排查步骤如下:
    1. 确认是否已开启消息订阅。
    2. 确认 Pulsar 客户端的环境配置。
    3. 确认设备是否添加至测试设备,而 Pulsar 为正式环境。