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

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

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

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

前提条件

操作实践

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

第一步:下载 Demo 源码

单击下载 Pulsar SDK 源码,下载 Zip 包至本地,解压缩即可。

第二步:打开源码工程

  1. Rider 打开源码工程: 单击 New Solution ,创建一个新的方案。
    New Solution 界面,选中 Console Application 界面,输入方案名称( Solution Name ),Language 选择 C#,Framework 选择 net5.0,并单击 Create 创建完成。

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

  2. 复制下载的 源码 至开发项目中的 Program.cs 文件内。

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

  3. 添加依赖包。该项目需要以下依赖包:

    • System.Net.WebSockets Version=4.3.0
    • Newtonsoft.Json Version=13.0.1

    1)选择顶部导航条 Tools > NuGet > Manage NuGet Packages for Solution ,打开 NuGet 管理器。
    基于 Pulsar 获取消息推送(C# SDK)

    2)输入需要安装的包名,选中后,在右侧界面选中对应的 Version 版本号,并单击 + 进行安装。
    Newtonsoft.Json 安装界面如下所示:
    基于 Pulsar 获取消息推送(C# SDK)

    3)单击 Install 确认安装。

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

    System.Net.WebSockets 安装界面:
    基于 Pulsar 获取消息推送(C# SDK)

第三步:配置项目参数

修改示例代码 Program.cs 文件参数,本文以测试通道为例做展示。

// accessId, accessKey,serverUrl,MQ_ENV
private static string ACCESS_ID = "xt*****ff**n1****8ufo";
private static string ACCESS_KEY = "479bcb7345******582d9c******4ef7";
private static string WSS_SERVER_URL = "wss://mqe.tuyacn.com:8285/";
private static string MQ_ENV= MQ_ENV_TEST;

参数说明如下:

  • ACCESS_ID:填写云开发平台中 API 授权密钥的 Access ID。

  • ACCESS_KEY:填写云开发平台中 API 授权密钥的 Access Secret。

  • WSS_SERVER_URL:根据调用的区域进行选择

    • 中国数据中心:wss://mqe.tuyacn.com:8285/
    • 美西数据中心:wss://mqe.tuyaus.com:8285/
    • 中欧数据中心:wss://mqe.tuyaeu.com:8285/
    • 印度数据中心:wss://mqe.tuyain.com:8285/
  • MQ_ENV:消息订阅通道

    • MQ_ENV_PROD:正式环境
    • MQ_ENV_TEST:测试环境

    MQ_ENV 中,MQ_ENV_TEST 代表测试环境,MQ_ENV_PROD 代表正式环境。

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

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

  1. 配置测试设备。
    1)在消息订阅页面,待订阅状态 栏会显示 已订阅后,单击 消息测试 页签。

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

    2)在搜索栏中输入已关联的设备 ID,单击放大镜按钮搜索后,单击选中设备。
    基于 Pulsar 获取消息推送(C# SDK)
    3)已关联的设备设置为测试设备后,测试设备所上报的消息会发送至测试通道,以方面您进行设备功能调试。

  2. 在开发工具 Rider 上,选中 Pulsar-demo 工程,右键单击,并执行 RUN

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

  3. 通过 App 端操作设备。
    1)打开测试设备灯具的开关。
    2)调整灯光亮度。

  4. 在开发工具 Rider 上自动获取到消息推送展示。
    基于 Pulsar 获取消息推送(C# SDK)

  5. 数据展示,字段含义请参见文档 消息格式

消息推送信息解析

开启灯

  • 接收的消息

    payload={"data":"uSqWibG1DRsqYj/EWW5xRP4NlAo948wkhatFSvvtl3lgYzHRCUfLB8bAhjohz5jqzQtf9wFhkSQ6IBE2P3yYPmXksA0dqEMhr3RmkClnnfWt9xi+AvqZ5E3OZgI3dkpaD+3oi9XCRpgXXnjyjoyXPxk8qvcNe3J+kdU32jkbjxlzxxG+g6m1fHPH7m4+OHuh8Q09f8Ff1CNONQFvMLfStqmh6zyXimOxTy0x9pIPxUPxHwhUndn4xepP09qbODn0","protocol":4,"pv":"2.0","sign":"16cc5405b1e843bdd6f25063fa8ce330","t":1631158677498}
    payloadJson={
      "data": "uSqWibG1DRsqYj/EWW5xRP4NlAo948wkhatFSvvtl3lgYzHRCUfLB8bAhjohz5jqzQtf9wFhkSQ6IBE2P3yYPmXksA0dqEMhr3RmkClnnfWt9xi+AvqZ5E3OZgI3dkpaD+3oi9XCRpgXXnjyjoyXPxk8qvcNe3J+kdU32jkbjxlzxxG+g6m1fHPH7m4+OHuh8Q09f8Ff1CNONQFvMLfStqmh6zyXimOxTy0x9pIPxUPxHwhUndn4xepP09qbODn0",
      "protocol": 4,
      "pv": "2.0",
      "sign": "16cc5405b1e843bdd6f25063fa8ce330",
      "t": 1631158677498
    }
    
    
  • 解析 payload 数据

    data={"dataId":"52effb10-111f-11ec-935e-02426139acc4","devId":"vde*******70149816","productKey":"AAi******Tgmo64Hq","status":[{"1":"true","code":"switch_led","t":1631158677476,"value":true}]}
    

    Payload 数据解析方法参见 数据签名。SDK 中已封装 payload 解密方法 DecryptByAes

调整灯光亮度

  • 接收的消息

    payload={"data":"vJuyzlQPkXrZn/9OSwTOP5bmlNruRVFOZoc1Zod3Ul9gYzHRCUfLB8bAhjohz5jqzQtf9wFhkSQ6IBE2P3yYPmXksA0dqEMhr3RmkClnnfWt9xi+AvqZ5E3OZgI3dkpaD+3oi9XCRpgXXnjyjoyXP4F82++oke4J6O8vAvLCpDxsOTqBLnuQXj9p+sknAK6Z1NAGbES2LQ4fDPlg/ZFqoccIX3s9PhIo9cPZSzctc9MrqoBg1e7jFRfIAiY3bPYx","protocol":4,"pv":"2.0","sign":"53b8014e0c2d445e8dca665a02236100","t":1631158740025}
    payloadJson={
      "data": "vJuyzlQPkXrZn/9OSwTOP5bmlNruRVFOZoc1Zod3Ul9gYzHRCUfLB8bAhjohz5jqzQtf9wFhkSQ6IBE2P3yYPmXksA0dqEMhr3RmkClnnfWt9xi+AvqZ5E3OZgI3dkpaD+3oi9XCRpgXXnjyjoyXP4F82++oke4J6O8vAvLCpDxsOTqBLnuQXj9p+sknAK6Z1NaAGbES2LQ4fDPlg/ZFqoccIX3s9PhIo9cPZSzctc9MrqoBg1e7jFRfIAiY3bPYx",
      "protocol": 4,
      "pv": "2.0",
      "sign": "53b8014e0c2d445e8dca665a02236100",
      "t": 1631158740025
    }
    
  • 解析 Data 数据

    data={"dataId":"782ee45f-111f-11ec-935e-02426139acc4","devId":"vde*******70149816","productKey":"AAi******Tgmo64Hq","status":[{"3":"177","code":"bright_value","t":1631158739964,"value":177}]}