开箱即用的数据缓存服务|EMQX Cloud 影子服务应用场景解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 通过EMQX Cloud影子服务提供的平台数据缓存能力,用户可以更加便捷地实现各类物联网场景应用,缩短研发周期。

在物联网业务高速迭代的今天,快速连接物联网设备与平台应用,实现业务快速落地与市场验证,是很多企业塑造核心竞争力、实现业务创新的关键。

EMQX Cloud 作为一站式运维代管的 MQTT 消息云服务,可以帮助用户在公有云环境中快速实现物联网应用对接。为了进一步帮助用户快速搭建物联网业务,EMQX Cloud 近期推出了影子服务功能。通过影子服务提供的平台数据缓存能力,用户可以更加便捷地实现各类场景应用,缩短研发周期。

什么是影子服务

在物联网设备与应用的消息交互场景中,设备侧网络不稳定、低功耗设备休眠、移动端应用不定期消费数据等情况十分常见。对于物联网应用开发者来说,更需要数据生产与消费解耦的数据交互模型。因此 MQTT 作为基于发布/订阅的异步通讯协议在物联网场景中被广泛应用。为了进一步保证数据交互的可靠性,在 MQTT 消息接入层提供对设备最新上报消息与应用下发配置等数据的缓存与持久化就成为物联网平台设计中的一个重要需求。

EMQX Cloud 基于已有的 MQTT消息接入服务,在增值服务中增加了影子服务(Shadow Service)功能,提供开箱即用的平台侧数据缓存服务。用户可以在 EMQX Cloud 内置服务中完成设备上报数据缓存、修改、查看,快速创建物模型、设备影子以及其他和数据上报及下发相关的应用,无需自己购买外部资源以及复杂的配置实现数据缓存服务。

  1. 用户可以在一个 EMQX Cloud 专业版实例中创建多个影子服务。每个影子服务创建后会生成一个全局唯一的 shadow_id,用户可以通过基于 shadow_id 的固定上下行 MQTT 主题以及 RestAPI 来创建、修改、删除不同缓存服务中的数据;
  2. 缓存数据以 JSON 文档的格式存储在影子服务中,用户在创建,修改缓存文档时,影子服务会自动为 JSON 文档添加创建/修改的时间戳以及更新文档版本,方便文档消费者确认信息。对每一个影子服务我们只保存最新的版本的数据;
  3. 影子服务提供 MQTT 与 RestAPI 两种接口来对缓存文档进行增删改查的操作,方便 MQTT 设备与应用服务调用;
  4. 影子服务提供的 MQTT 接口完全适配标准 MQTT 协议,客户端只要符合标准 MQTT 协议即可调用影子服务,无需定制化的 SDK,也没有平台绑定。

应用场景示例

我们以智能家居场景为例来详细解释如何使用影子服务。在智慧家居场景中,最常见的应用是通过智能家居设备-云端服务-个人移动 APP 之间的数据互动,实现 APP 设备状态的上报更新以及对设备的远程控制。利用影子服务,我们可以非常简单地实现一个智能设备控制应用,以智能空调为例:

空调温度状态上报

1.在 EMQX Cloud 中为智能空调设备创建一个影子服务,影子服务为此设备创建唯一的 shadow_id 和固定的发布订阅主题
EMQX Cloud 添加影子模型 图1.png

2.智能空调设备通过 MQTT 协议将空调内置温度传感器数据定时上报到影子服务指定的发布主题 shadow/8suy0g7pp08ibdtc 中,首次上报数据 Payload 使用 PUT 操作:

3.

   {
     "method": "PUT",
     "payload": {
       "status":{
         "temp":26
         }
     }
   }

这时在影子服务中就可以看到一个新的数据被缓存下来:

影子模型 图2.png

这里面我们可以看到除了设备上报的空调温度 JSON 文档以外,影子服务也为这份文档自动添加了:

  • createAT:文档创建时间;
  • lastTime:文档更新时间;
  • version:文档版本号;

方便后续 APP 对比历史数据和展示数据;

4.智能空调可以以定时上报的方式持续更新影子服务中缓存的温度数据,在 MQTT payload 中使用 PATCH 方法进行数据更新:

{
  "method": "PATCH",
  "payload": {
    "status":{
      "temp":24
    }
  }
}

影子服务中的缓存数据即被更新为:

影子模型 JSON 图3.png

5.当用户打开手机 APP 想查看空调运行情况与室内温度时,APP 可以通过 MQTT 或 RestAPI 接口,从影子服务缓存中获取到最新的状态数据。以 MQTT 方式为例,APP 打开后会与 EMQX Cloud 服务建立一个 MQTT 连接,通过订阅主题 shadow/8suy0g7pp08ibdtc/reply 获取设备消息;

6.如果此时空调数据没有上报,可以通过向影子服务的发布主题 shadow/8suy0g7pp08ibdtc 发送一个 GET 指令来拉取缓存中的最新状态:

{
  "method": "GET",
  "payload": {
  }
}

影子服务收到此消息后,就会将缓存中的数据返回给 APP:

{
  "data": {
    "status": {
      "temp": 24
    }
  }, 
  "createAt": 1661365033203, 
  "lastTime": 1661365569334, 
  "version": 2
}

7.如果 APP 持续在线,当有新的空调温度状态上报到影子服务中时,由于 APP 已经订阅了 shadow/8suy0g7pp08ibdtc/reply 主题,最新的状态数据就会推送到 APP 中。这样,一个动态更新的空调温度展示业务就可以轻松完成。

APP 远程调节空调温度

如果我们希望能从 APP 调节空调温度,同时保留空调设备状态上报功能。

  1. 我们需要在 JSON 文档中增加一个键值,如通过 PATCH 命令增加 desired:
  2. {
      "method": "PATCH",
      "payload": {
        "desired":{
        }
      }
    }

    此时 JSON 文档变为:

    {
      "data":{
        "desired":{},
        "status":{
          "temp":24
        }
      },
      "createAt":1661365033203,
      "lastTime":1661366036466,
      "version":3
    }
  3. 同时空调也需要订阅 shadow/8suy0g7pp08ibdtc/reply 主题来接收 APP 的调节指令(当然,也可以为指令下发建立一个新的影子服务,这样就有一个独立的控制下发主题通道);
  4. 然后我们就可以通过 APP 来下发控制指令:

    {
      "method": "PATCH",
      "payload": {
        "desired":{
           "temp":27
        }
      }
    }

    此时 JSON 文档更新为:

    {
      "data": {
        "desired": {
          "temp": 27
        }, 
        "status": {
          "temp": 24
        }
      }, 
      "createAt": 1661365033203, 
      "lastTime": 1661366053663, 
      "version": 4
    }
  5. 当空调通过订阅 shadow/8suy0g7pp08ibdtc/reply 主题收到上面更新的 JSON 文档后,空调客户端程序通过 desired 键内设置的值更新自身温度设定,实现远程 APP 温度控制。

更多应用可能

除了智能家居场景以外,我们还可以利用影子服务的数据缓存功能实现很多业务场景应用:

  1. 低功耗智能表计数据采集与远程配置:在实际生活中很多智能表计设备(如燃气表,水表等)由于依靠电池供电,为了延长电池供电寿命经常会采用休眠的方式来节电。比如入户燃气表一天可能只会唤醒 1-2 次,唤醒时间在几分钟内。通常我们会在唤醒阶段上报表计读数,并同时接收更新平台侧应用对表计的最新配置。此时,我们就可以利用影子服务将平台侧的配置缓存起来,当表计唤醒后拉取最新的配置数据进行更新。这样平台应用在下发配置的时候也不需要探察表计设备是否在线,简化了应用逻辑。
  2. 车联网车机消息推送:在车联网场景中,车机在熄火的情况下是处在休眠状态。而车联网平台部分消息通知(保养提醒、运营消息通知等)可以利用影子服务的缓存功能实现对离线车机设备的消息缓存。当车辆发动车机唤醒后,通过拉取影子服务中的缓存消息实现离线消息的同步更新。

结语

EMQX Cloud 提供的开箱即用的影子服务可以适配不同行业各类型业务场景对数据缓存的需求。通过 EMQX Cloud 提供的全托管 MQTT 消息云服务,结合影子服务功能,用户可以快速实现 MQTT 设备接入与消息缓存的一体化能力,大大加快物联网应用开发速度。同时,影子服务中灵活的消息缓存数据结构,也可以帮助用户轻松实现后期业务的扩展,为用户业务持续发展提供保障。

版权声明: 本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.com/zh/blog/emqx-cloud-shadow-service-application-scenario

目录
相关文章
|
2月前
|
消息中间件 存储 缓存
十万订单每秒热点数据架构优化实践深度解析
【11月更文挑战第20天】随着互联网技术的飞速发展,电子商务平台在高峰时段需要处理海量订单,这对系统的性能、稳定性和扩展性提出了极高的要求。尤其是在“双十一”、“618”等大型促销活动中,每秒需要处理数万甚至数十万笔订单,这对系统的热点数据处理能力构成了严峻挑战。本文将深入探讨如何优化架构以应对每秒十万订单级别的热点数据处理,从历史背景、功能点、业务场景、底层原理以及使用Java模拟示例等多个维度进行剖析。
74 8
|
7天前
|
JSON 前端开发 搜索推荐
关于商品详情 API 接口 JSON 格式返回数据解析的示例
本文介绍商品详情API接口返回的JSON数据解析。最外层为`product`对象,包含商品基本信息(如id、name、price)、分类信息(category)、图片(images)、属性(attributes)、用户评价(reviews)、库存(stock)和卖家信息(seller)。每个字段详细描述了商品的不同方面,帮助开发者准确提取和展示数据。具体结构和字段含义需结合实际业务需求和API文档理解。
|
2天前
|
存储 弹性计算 安全
Cloud Backup深度解析:从被动防御到主动保护
《Cloud Backup深度解析:从被动防御到主动保护》由阿里云高级技术专家张磊分享,探讨企业数据保护面临的挑战及应对策略。内容涵盖企业数据安全威胁、小概率事件的高风险性、传统备份系统的不足,以及通过四步主动防御策略(资源发现、风险检测、数据锁定、全局巡检)实现高效的数据保护。同时介绍了基于标签的自动策略关联、多种备份引擎、恶意文件检测、探测效率优化等关键技术,确保备份数据的安全性和完整性。此外,还展示了数据灾备中心和全方位主动数据保护机制,帮助企业在面对勒索病毒、内部攻击等威胁时,构建更强大的防护体系。
|
5天前
|
存储 分布式计算 Hadoop
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
28 7
|
2月前
|
数据采集 自然语言处理 搜索推荐
基于qwen2.5的长文本解析、数据预测与趋势分析、代码生成能力赋能esg报告分析
Qwen2.5是一款强大的生成式预训练语言模型,擅长自然语言理解和生成,支持长文本解析、数据预测、代码生成等复杂任务。Qwen-Long作为其变体,专为长上下文场景优化,适用于大型文档处理、知识图谱构建等。Qwen2.5在ESG报告解析、多Agent协作、数学模型生成等方面表现出色,提供灵活且高效的解决方案。
251 49
|
2月前
|
存储 缓存 监控
后端开发中的缓存机制:深度解析与最佳实践####
本文深入探讨了后端开发中不可或缺的一环——缓存机制,旨在为读者提供一份详尽的指南,涵盖缓存的基本原理、常见类型(如内存缓存、磁盘缓存、分布式缓存等)、主流技术选型(Redis、Memcached、Ehcache等),以及在实际项目中如何根据业务需求设计并实施高效的缓存策略。不同于常规摘要的概述性质,本摘要直接点明文章将围绕“深度解析”与“最佳实践”两大核心展开,既适合初学者构建基础认知框架,也为有经验的开发者提供优化建议与实战技巧。 ####
|
1月前
|
XML JSON JavaScript
HttpGet 请求的响应处理:获取和解析数据
HttpGet 请求的响应处理:获取和解析数据
|
2月前
|
数据采集 存储 自然语言处理
基于Qwen2.5的大规模ESG数据解析与趋势分析多Agent系统设计
2022年中国上市企业ESG报告数据集,涵盖制造、能源、金融、科技等行业,通过Qwen2.5大模型实现报告自动收集、解析、清洗及可视化生成,支持单/多Agent场景,大幅提升ESG数据分析效率与自动化水平。
149 0
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
107 2
|
26天前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析

热门文章

最新文章

推荐镜像

更多