简体中文
简体中文
English
联系我们
注册
登录
涂鸦 IoT 开发平台云开发消息队列最佳实践基于 Pulsar 获取消息推送(Java SDK)

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

更新时间:2021-11-16 09:08:16下载pdf

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

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

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

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

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

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

  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 为正式环境。
  4. Q:消息订阅如何收费的?
    A:通过消息转发量进行收费,具体可以参见 产品定价