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

更新时间:2023-06-01 06:19:40

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

前提条件

操作实践

目前,涂鸦基于开源的 Pulsar 系统进行了定制改进,并提供 C# 版本 Pulsar SDK

本文通过使用 C# 开发工具 Rider 进行消息接收实践。

第一步:下载 Demo 源码

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

第二步:打开源码工程

  1. Rider 打开源码工程:单击 New Solution ,创建一个新的方案。

  2. New Solution 界面,选中 Console Application 界面,输入方案名称( Solution Name ),Language 选择 C#,Framework 选择 net5.0,并单击 Create 创建完成。

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

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

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

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

    • 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务必修改为私有云对应域名地址

  • MQ_ENV:消息订阅通道

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

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

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

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

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

  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}]}