新零售电子价签解决方案由阿里云云消息队列 MQTT 版推出,通过MQTT以实现商场超市、公共场所电子标签、多媒体屏幕的数据更新管理。本文将以电子价签为例详细描述该解决方案的系统架构、数据流设计以及注意事项,其他类似行业可参考该方案修改适配。

名词解释

MQTT
一种物联网和移动互联网领域的行业标准协议,适合移动终端之间的数据传输。云消息队列 MQTT 版默认支持该协议。
MQTT服务器
云消息队列 MQTT 版提供的MQTT协议交互的服务端节点,用于接收消息并转发消息。
MQTT客户端
用于和MQTT服务器交互的节点,本方案中特指发送或接收价格变更消息的智能AP。
P2P消息
云消息队列 MQTT 版在标准的MQTT协议基础上提供的一种特殊消息,该类型消息无需普通的订阅关系匹配,便可直接发送给指定的单个目标MQTT客户端。详细信息,请参见P2P消息收发模式(MQTT)
智能AP
市面常见的智能路由器等网络设备,支持应用编程,可以同时承担互联网接入以及局域网设备控制等工作。
电子价签
实际分布在商场超市等场所中的电子显示屏幕,一般使用蓝牙、ZigBee等无线传感网络协议和智能AP节点组网。
电子价签管控服务
电子价签系统中用于管理电子屏幕显示内容的后台服务,主要承担改价等人工操作的任务管理和查询工作。
RDS
阿里云推出的一种稳定可靠、可弹性伸缩的在线数据库服务。在电子价签系统中用来持久化改价等任务的状态变更。
SLS日志存储
阿里云推出的日志存储服务,在电子价签系统中用来持久化保存所有操作日志,用于审计和溯源。

方案架构

在电子价签解决方案中,云消息队列 MQTT 版与阿里云多个产品结合使用,实现价签的数据更新管理。方案架构展示了针对电子价签系统的解决方案架构。

图 1. 方案架构
architecture
方案架构所示,在电子价签系统中,主要包含价签节点、智能AP节点、云消息队列 MQTT 版云消息队列 RocketMQ 版、电子价签后台管控服务、RDS以及SLS。各个组件介绍如下:
  • 智能AP负责转发上报价签的状态数据,并接收改价指令。智能AP按照门店或者场所分布,内部使用MQTT SDK从公网接入阿里云云消息队列 MQTT 版,该链路采用SSL/TLS加密传输,防止数据泄露。
  • 一个智能AP下行链路和若干价签节点通过蓝牙、ZigBee等无线传感网络协议组网,完成局域网内部数据交互。
  • 电子价签后台管理服务部署在云端(云服务ECS),使用云消息队列 RocketMQ 版的SDK和云消息队列 RocketMQ 版交互,MQTT服务端和RocketMQ服务端天然互通。
  • 电子价签后台管理服务可以将改价等任务的状态变更持久化到RDS数据库以确保任务变更成功,并将价签上报数据和操作日志存储到SLS,方便溯源和审计。

方案优势

新零售电子价签解决方案的优势如下所述:

  • 服务能力强,可弹性伸缩
    • 云消息队列 MQTT 版消息传输能力无限扩展,智能终端数量增加无需担心系统能力不足。
    • 云消息队列 MQTT 版支持百万级设备毫秒级推送完成,电子价签屏显更新延迟更小。
  • 适用范围广,通用性好,可快速复制
    • 基于MQTT标准协议实现,通用性好,方案只需简单适配数据内容即可快速复制到其他相似场景。
  • 安全可靠
    • 云消息队列 MQTT 版服务和智能AP节点数据传输支持SSL/TLS加密,无需担心媒体商业数据泄露。
    • 所有服务节点高可用,稳定性高。

数据交互

状态上报

  1. 电子价签节点会采用定时轮询机制和智能AP节点交换数据,上报自己当前的显示状态、节点电量等信息。
  2. 智能AP节点组织数据,并发送MQTT消息到MQTT服务器。
  3. MQTT服务器会将上报消息写入业务方指定的云消息队列 RocketMQ 版Topic。
  4. 电子价签管控服务通过接收云消息队列 RocketMQ 版消息,处理分析当前系统中在线的价签节点的状态,并将数据记录到SLS。

更新屏显

  1. 电子价签管控服务发送改价的云消息队列 RocketMQ 版消息,触发改价操作。
  2. MQTT服务端会路由该云消息队列 RocketMQ 版消息,将消息通过MQTT协议推送给目标智能AP节点。
  3. 智能AP节点收到改价通知,将任务暂存。
  4. 电子价签节点会采用轮询机制和智能AP节点交换数据,感知新的屏显内容。
  5. 目标电子价签节点改价成功后,智能AP节点回发一条应答MQTT消息,通知电子价签管控服务当前任务已完成。
  6. 电子价签管控服务将当前任务的执行记录写入SLS日志,方便后续溯源查询。

注意事项

上述流程简要描述了如何使用云消息队列 MQTT 版云消息队列 RocketMQ 版来搭建电子价签系统,具体的SDK说明请参见云消息队列 MQTT 版以及云消息队列 RocketMQ 版文档。

其中使用云消息队列 MQTT 版云消息队列 RocketMQ 版进行指令传输时,相关的消息类型设计以及参数设计请尽可能遵循如下原则:

  • SDK和协议选择

    电子价签场景中,一个应用可能存在成百上千的线下门店,一般每个门店配备若干个智能AP节点,智能AP节点会随着业务规模上升而增加,所以智能AP节点适合使用MQTT协议接入,而电子价签管控服务由于部署在云端,适合使用云上的云消息队列 RocketMQ 版接入。

  • 客户端ID映射
    MQTT协议要求每个客户端都有一个全局唯一的Client ID,Client ID由以下两部分组成,这两部分通过“@@@”分隔符连接,只需要保证最终的Client ID唯一且总长度不超过64个字符即可:
    • 前缀Group ID:Group ID需在云消息队列 MQTT 版控制台申请。Group ID按照平台供应商或者渠道进行粗分类,例如不同的行业、批次分成不同的Group ID,或者不同版本的客户端使用不同的Group ID,方便问题定位。
    • 后缀Device ID:Device ID由应用生成。Device ID可以使用智能AP节点的MAC地址等唯一性信息编码。

    Client ID的更多信息请参见名词解释

  • Topic名称映射

    使用云消息队列 MQTT 版收发消息需要了解MQTT协议订阅关系的模型,详情请参见协议文档官网文档

    MQTT是遵循发布/订阅模型的消息协议,订阅关系和Topic符合目录树格式,Topic可分为父级Topic和子级Topic,Topic(包含父级Topic和子级Topic)的总长度不能超过64个字符:
    • 父级Topic:通常称目录树第一级的Topic为父级Topic。父级Topic需要在云消息队列 MQTT 版控制台申请后才可使用,申请后相当于一个Namespace。
    • 子级Topic:目录树第一级的Topic的后续部分称为子级Topic。子级Topic无需申请,业务方可以随意指定。

    Topic的更多信息请参见名词解释

    业务方设计用于消息收发的Topic时,需要遵循以下原则:

    • 不同类型的任务使用不同的父级Topic,例如本场景中,改价任务和终端状态上报使用不同的父级Topic。
    • 对于电子价签系统中,改价任务的交互消息建议使用云消息队列 MQTT 版提供的P2P消息,P2P消息不需要订阅,发送方直接指定对端接收即可,详细信息,请参见P2P消息收发模式(MQTT)
  • 收发消息参数设计
    由于电子价签场景改价任务一般要求实时推送,建议在智能AP和MQTT服务器交互过程中,智能AP做以下配置,以确保智能AP无需处理掉线期间的任务:
    • cleanSession参数设置为“true”。
    • QoS设置成“1”。
    智能AP应该对收到的消息做去重以及时效性校验。

    cleanSessionQoS的更多信息,请参见名词解释