接入消息订阅服务

更新时间:2023-08-23 05:58:09下载pdf

涂鸦基于开源的 Pulsar 进行了定制改进,实现消息订阅功能,并提供 Java 版本 Pulsar SDK。本文介绍如何使用涂鸦 Pulsar SDK 进行消息接收实践。

准备工作

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

第一步:配置开发环境

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

    单击 Open,查找到下载的 Pulsar 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 代表正式环境。
    接入消息订阅服务

  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。
    接入消息订阅服务

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

  1. 配置测试设备。

    1. 在云项目的 消息订阅 页面,开启消息订阅。
      接入消息订阅服务

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

      接入消息订阅服务
    3. 在搜索栏中输入已关联的设备 ID,单击放大镜按钮搜索后,单击选中设备。

      接入消息订阅服务
    4. 已关联的设备设置为测试设备后,测试设备所上报的消息会发送至测试通道,以方面您进行设备功能调试。

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

    接入消息订阅服务
  3. 通过智能生活 App 操作设备。

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

    接入消息订阅服务

第三步:解析消息

根据您收到的消息推送,您可以按照以下格式进行解析。更多消息类型,请参考 消息类型

参数名 数据类型 描述
protocol Integer 协议号
pv String 通讯协议版本号
t Long 时间戳
sign String 签名
data String 数据体
{
   "protocol": 4,
   "pv": "2.0",
   "t": 146052438362,
   "data":"4FDEE3FE59Fxxxx***",
   "sign": "58285279b5b5790c7d917dxxxxx***"
}

最佳实践

使用涂鸦 Pulsar SDK(Java)进行消息接收实践后,您可以继续:

常见报错

Failed to authenticate

  • 原因分析:该错误是因为无法识别订阅者。

  • 解决方法:

    • 如果是 ACCESS_IDACCESS_KEY 错误,您可以检查在上文为云项目中配置的 ACCESS_ID 秘钥对是否正确。

    • 如果是客户端连接的区域没有开通消息订阅,具体可参考 管理订阅消息

      接入消息订阅服务

Subscription does not exist

  • 原因分析:该错误是因为订阅信息不存在。

  • 解决方法:前往 涂鸦 IoT 开发平台 查看订阅名称是否存在。涂鸦默认提供一个订阅名称,规则为 {AccessId}-sub(例如 57e9trwr********s38-sub)。但是,自定义的订阅名称需要您前往涂鸦 IoT 开发平台自行创建,具体步骤请参考 管理订阅消息

    接入消息订阅服务

Subscription is of different type

  • 完整错误:Failed to subscribe 57e9trwr********s38/out/event with 11 partitions Subscription is of different type

  • 原因分析:该错误是当前已经存在其它订阅类型的消费者,多种订阅类型的消费者无法共存。

  • 解决方法:如果要修改消费者订阅类型,您先关闭所有消费者再启动,或者更换一个订阅名称。

    接入消息订阅服务