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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 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

目录
相关文章
|
16天前
|
存储 缓存 网络协议
如何防止DNS缓存中毒攻击(一)
DNS缓存中毒也称为DNS欺骗
43 10
|
16天前
|
缓存 网络协议 安全
如何防止DNS缓存中毒(Ⅱ)
服务器应该配置为尽可能少地依赖与其他DNS服务器的信任关系
39 10
|
23天前
|
存储 分布式计算 Java
存算分离与计算向数据移动:深度解析与Java实现
【11月更文挑战第10天】随着大数据时代的到来,数据量的激增给传统的数据处理架构带来了巨大的挑战。传统的“存算一体”架构,即计算资源与存储资源紧密耦合,在处理海量数据时逐渐显露出其局限性。为了应对这些挑战,存算分离(Disaggregated Storage and Compute Architecture)和计算向数据移动(Compute Moves to Data)两种架构应运而生,成为大数据处理领域的热门技术。
40 2
|
28天前
|
域名解析 缓存 网络协议
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
|
28天前
|
存储 缓存 算法
分布式缓存有哪些常用的数据分片算法?
【10月更文挑战第25天】在实际应用中,需要根据具体的业务需求、数据特征以及系统的可扩展性要求等因素综合考虑,选择合适的数据分片算法,以实现分布式缓存的高效运行和数据的合理分布。
|
29天前
|
安全 测试技术 数据安全/隐私保护
原生鸿蒙应用市场开发者服务的技术解析:从集成到应用发布的完整体验
原生鸿蒙应用市场开发者服务的技术解析:从集成到应用发布的完整体验
|
29天前
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
105 1
|
13天前
|
数据采集 存储 自然语言处理
基于Qwen2.5的大规模ESG数据解析与趋势分析多Agent系统设计
2022年中国上市企业ESG报告数据集,涵盖制造、能源、金融、科技等行业,通过Qwen2.5大模型实现报告自动收集、解析、清洗及可视化生成,支持单/多Agent场景,大幅提升ESG数据分析效率与自动化水平。
|
1月前
|
JSON 前端开发 JavaScript
API接口商品详情接口数据解析
商品详情接口通常用于提供特定商品的详细信息,这些信息比商品列表接口中的信息更加详细和全面。以下是一个示例的JSON数据格式,用于表示一个商品详情API接口的响应。这个示例假定API返回一个包含商品详细信息的对象。
|
2月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
78 6

推荐镜像

更多