前序系列文章>>>

【涂鸦物联网足迹】涂鸦云平台标准指令集

开放消息平台主要通过 Pulsar 主动推送各种事件数据给外部合作伙伴,以满足合作伙伴对消息实时性和消息持久化的要求。

一、Pulsar

对于Pulsar的介绍,大家可以看一下这位大佬的简单介绍>>>pulsar-介绍。简单来说,Pulsar最初由雅虎开发,现在由 Apache 软件基金会管理,是一个支持多租户、高性能的服务器到服务器之间消息通讯的解决方案。

涂鸦智能基于开源的 Pulsar 系统进行了定制改进,按照涂鸦智能提供的 Pulsar SDK 可完成消息接入。

​ Pulsar 作为消息代理采用了Pub/Sub(发布订阅)的设计模式。该设计模式中,生产者将消息发布到主题,然后消费者可以订阅这些主题,处理传入消息,并在处理完成时发送确认。当订阅被创建时(即使消息处理设备已断开连接)所有的消息都将被 Pulsar 保留。只有在消息处理设备确认消息被成功处理后,保留下来的消息才会被丢弃。

​ 此外,一个主题可以由多个消费者订阅,并且当消费者成功处理消息时,它需要向代理发送确认,以便代理可以丢弃该消息。涂鸦智能的 Pulsar 消息分发器(Broker)为每个主题分配了多个分区,Pulsar 消息分发器将根据分区和消费者分发消息。

二、相关说明

** 安全:**

  • 认证安全:涂鸦智能 Pulsar 消息系统针对身份认证进行了深度定制以满足高安全性要求,涂鸦智能采用动态令牌机制增强安全,开发者可忽略实现细节,基于涂鸦智能提供的 SDK 完成认证。

  • 数据安全:

    |- 传输安全:涂鸦智能 Pulsar 消息推送系统基于 SSL 传输数据。

    |- 业务安全:业务数据均采用 AES-128 加密,请求均附上签名。

    请求方式:

    具体参考 ConsumerExample 代码。接入时需要提供以下三部分数据:
  • username:填写云开发平台中 API 授权密钥的 Access ID。

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

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

    中国区:pulsar+ssl://mqe.tuyacn.com:7285/

    美国区:pulsar+ssl://mqe.tuyaus.com:7285/

    欧洲区:pulsar+ssl://mqe.tuyaeu.com:7285/

    印度区:pulsar+ssl://mqe.tuyain.com:7285/

    开通方式:

  1. 登录IoT 工作台> 云开发。
  2. 创建项目。
  3. 在项目中的消息订阅模块,开通消息订阅功能。

代码示例:

String url = ""; String accessId = ""; String accessKey = ""; MqConsumer mqConsumer = MqConsumer.build() .serviceUrl(url) .accessId(accessId) .accessKey(accessKey) .maxRedeliverCount(3) .messageListener(new MqConsumer.IMessageListener() { @Override public void onMessageArrived(Message message) throws Exception { //write your own message processing logic } }); mqConsumer.start();

数据格式:

{ "protocol": 4, "pv": "2.0", "t": 146052438362, "data":"4FDEE3FE59FCD76E260F7115011D65C7FD2AF59BFA4DC29E5DDF3FDA6BD5447E02F679052C34BBAAB7BB0EFEED62C760FD2AF59BFA4DC29E5DDF3FDA6BD5447EC660C816075824E004EC0123DE4FD1B638BB633A478EB2C2004EF4289276****", "sign": "58285279b5b5790c7d917de88b3e****" }

数据签名:

在获得真正的data数据前,可以设置防篡改 MD5 签名校验。签名算法执行步骤如下:

1.将收到的 JSON 格式的每个参数(除sign和值为空外)格式化为key=val。

2.进行组装(使用key升序)。组装后的字符串格式示例:k1=v1||k2=v2。

3.添加密钥。例如:k1=v1||k2=v2...kn=vn||key。

4.进行整串字符串的 MD5 签名。

5.如果 MD5 值和收到数据的 sign 一致,则表明数据没有被篡改;否则视为被篡改。

签名校验通过后,对数据进行解密:

1.先对数据进行 Base64 解码。

2.通过 AES (ECB 模式)对 accessKey 的中间 16 位代码进行解密 ,从而得到真正的设备状态数据。

解密后数据格式如下:

{ "devId": "002dj00118fe34d9****", "productKey": "开发者平台定义产品对应的产品 Key", "dataId":"1459168450ddfdfoiopiopi****",//全局唯一 ID, 数据上报唯一标识 ID "status": [ { "code":"switch", "value":false, "mode":"rw", "t":146052438362 }, { "code":"work_mode", "value":"colour", "mode":"rw", "t":146052438362 } ] }

三、业务数据

协议号:

协议号(不同协议号代表了不同的功能)。

设备数据上报事件:

{ "devId": "002dj00118fe34d9****", "productKey": "开发者平台定义产品对应的产品 Key", "dataId": "1459168450ddfdfoiopiopi****", "status": [ { "数据点编码1(产品定义时对应的数据点编码)": "数据点对应的值", "t": 1540615024283 // 数据点状态发生时间 }, { "数据点编码2(产品定义时对应的数据点编码)": "数据点对应的值", "t": 1540615024283 // 数据点状态发生时间 } ] }

其他事件:

数据示例

{ "devId": "002dj00118fe34d9****", "productKey": "开发者平台定义产品对应的产品 Key", "bizCode": "online", "bizData": { "time": 146052438362 } }

设备离线:

bizData说明

数据示例

{ "devId": "002dj00118fe34d9****", "productKey": "开发者平台定义产品对应的产品 Key", "bizCode": "offline", "bizData": { "time": 146052438362 } }

设备名变更

bizData 说明

数据示例

{ "devId": "002dj00118fe34d9****", "productKey": "开发者平台定义产品对应的产品 Key", "bizCode": "nameUpdate", "bizData": { "devId": "002dj00118fe34d9****", "name": "new name" } }

设备 DP 名变更

bizData 说明

数据示例

{ "devId": "002dj00118fe34d9****", "productKey": "开发者平台定义产品对应的产品 Key", "bizCode": "dpNameUpdate", "bizData": { "devId": "002dj00118fe34d9****", "name": "new name", "dpId": "dpId" } }

设备绑定

bizData 说明

数据示例

{ "devId": "002dj00118fe34d9****", "productKey": "开发者平台定义产品对应的产品 Key", "bizCode": "bindUser", "bizData": { "devId": "002dj00118fe34d9****", "uuid": "06200043b4e618c1****", "uid":"ay1529485403390****", "token": "IIpQ****" } }

设备移除

bizData 说明

数据示例

{ "devId": "002dj00118fe34d9****", "productKey": "开发者平台定义产品对应的产品 Key", "bizCode": "delete", "bizData": { "devId": "002dj00118fe34d9****", "uid":"ay1529485403390S****" } }

设备升级状态

bizData 说明

数据示例

{ "bizCode":"upgradeStatus", "bizData": { "devId":"6ca8756d*****1b4ewsdn", "moduleType":0, "upgradeStatus":2, "description":"升级测试", "oldVersion": "1.0.1", "newVersion": "1.0.2" }, "devId":"6ca8756d*****1b4ewsdn", "productKey":"vFHpaEFwu8UD****", "ts":1562232522192 }

【涂鸦物联网足迹】涂鸦云平台消息服务—顺带Pulsar简单介绍的更多相关文章

  1. 【涂鸦物联网足迹】API及SDK介绍

    前序系列文章>>> [涂鸦物联网足迹]物联网主流通信方式 我们系列文章,都会围绕如何完成一款智能"隔空接吻机"的开发.希望能帮到各异地恋or异国恋的情侣们! 本文 ...

  2. 报表工具ActiveReports开发实例——物联网智能供水云平台

    一.公司简介 山西汾西电子科技股份有限公司(以下简称:汾西电子)是经中国船舶重工集团批准,在原汾西重工电子科技公司基础上重组的专业从事智能电能表.水表.热量表及电动汽车充电设备研发生产的高科技公司. ...

  3. 微软云平台媒体服务实践系列 1- 使用静态封装为iOS, Android 设备实现点播(VoD)方案

    微软的云平台媒体服务为流媒体服务提供了多种选择,在使用流媒体服务为企业做流媒体方案时,首先需要确认要流媒体接收目标,如针对广大iOS, Android移动设备,由于它们都支持HLS 格式的流媒体,基于 ...

  4. 微软云平台媒体服务实践系列 2- 使用动态封装为iOS, Android , Windows 等多平台提供视频点播(VoD)方案

    文章微软云平台媒体服务实践系列 1- 使用静态封装为iOS, Android 设备实现点播(VoD)方案  介绍了如何针对少数iOS, Android 客户端的场景,出于节约成本的目的使用媒体服务的静 ...

  5. 【转帖】云平台发现服务构建:为什么不使用ZooKeeper

    http://www.chinacloud.cn/show.aspx?id=19979&cid=16 [日期:2015-04-29] 来源:dockerone   作者: [字体:大 中 小] ...

  6. 【涂鸦物联网足迹】用煲仔饭来说明IaaS/PaaS/SaaS的区别

    最近在准备一些科普性的知识内容,发现大家对于一些基础性的知识概念还是有点模糊.今天先来简单介绍一下IaaS/PaaS/SaaS的区别~ 其实还有一个On-Premises(本地部署)的概念,也可以一并 ...

  7. .Net 分布式云平台基础服务建设说明概要

    1)  背景 建设云平台的基础框架,用于支持各类云服务的业务的构建及发展. 2)  基础服务 根据目前对业务的理解和发展方向,总结抽象出以下几个基础服务,如图所示 3)  概要说明 基础服务的发展会根 ...

  8. 消息服务百科全书——Kafka基本原理介绍

    架构 1.1 总体架构 因为Kafka内在就是分布式的,一个Kafka集群通常包括多个代理. 为了均衡负载,将话题分成多个分区,每个代理存储一或多个分区.多个生产者和消费者能够同时生产和获取消息. 一 ...

  9. 微服务技术栈简单介绍,Eureka和Ribbon的引入和使用

    一.了解微服务架构 1.微服务技术栈 整体框架 整体学习规划路线2.微服务与单体架构的区别 单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署 优势 结构简单 部署成本低 缺点 耦合度高, ...

随机推荐

  1. 如何写好 C语言 main 函数!你准备好编写 C 程序了吗?

    学习如何构造一个 C 文件并编写一个 C main 函数来成功地处理命令行参数.   我知道,现在孩子们用 Python 和 JavaScript 编写他们的疯狂"应用程序".但是 ...

  2. spring boot:用redis+lua限制短信验证码的发送频率(spring boot 2.3.2)

    一,为什么要限制短信验证码的发送频率? 1,短信验证码每条短信都有成本制约, 肯定不能被刷接口的乱发 而且接口被刷会影响到用户的体验, 影响服务端的正常访问, 所以既使有图形验证码等的保护, 我们仍然 ...

  3. 带你了解 MySQL Binlog 不为人知的秘密

    MySQL 的 Binlog 日志是一种二进制格式的日志,Binlog 记录所有的 DDL 和 DML 语句(除了数据查询语句SELECT.SHOW等),以 Event 的形式记录,同时记录语句执行时 ...

  4. 【Flutter 混合开发】与原生通信-MethodChannel

    Flutter 混合开发系列 包含如下: 嵌入原生View-Android 嵌入原生View-iOS 与原生通信-MethodChannel 与原生通信-BasicMessageChannel 与原生 ...

  5. MySQL备份和恢复[3]-mysqldump备份工具

    mysqldump 概述 逻辑备份工具: mysqldump, mydumper, phpMyAdmin Schema和数据存储在一起.巨大的SQL语句.单个巨大的备份文件 mysqldump:是My ...

  6. Baolu CSV Data Set Config

    1.背景 大家在平常使用JMeter测试工具时,对CSV Data Set Config 配置元件肯定不会陌生.如果我们的压测场景涉及到数据库更新操作(如:转账接接口)则需要对参数化数据进行分块,可就 ...

  7. 千万不要往 Shell 里粘贴命令!

    对于用惯了 IDE 的程序员来说,在终端里敲命令可能没那么顺手,也记不住那么多复杂的命令.比较偷懒的做法就是网上搜相关的命令,复制到剪贴板往命令行窗口里一贴,完事! 但是这么做有很大的风险,为什么呢? ...

  8. 如何使用FastCGI处理自定义HTTP头

    对于如何使用FastCGI处理自定义HTTP头这里记录一下注意事项: 在FastCGI中,自定义头可以从环境变量获得: 获取时名字前面要加HTTP_,字母要全部大写: 发送头不能有下划线_,否则该字段 ...

  9. 利用云主机搭建MySQL服务器

    前言:有了一台云服务器之后,就想着如何物尽其用.利用其不关机(意外除外)的特性,我们可以在服务器上安装数据库服务,实现云数据库服务器,这样就可以随时随地的访问数据库了,不再受各种限制. 这里以MySQ ...

  10. 注意由双大括号匿名类引起的serialVersionUID编译告警

    问题描述 最近版本组织清理编译告警,其中有这么一条比较有意思,之前没见过,拿出来说一说 "serializable class anonymous com.demo.Main$1 has n ...