SpringCloud Alibaba无人售货柜实战(一):项目整体架构设计——设备端、小程序、后台、微服务拆分
SpringCloud Alibaba无人售货柜实战一项目整体架构设计——设备端、小程序、后台、微服务拆分扫个码就能开门拿东西关个门就自动扣钱——这台柜子背后到底藏了多少套系统今天掰开揉碎给你讲明白。一、项目背景无人售货柜是个啥传统自动售货机是投币/扫码→选商品→机器弹出商品的逻辑结构复杂、故障率高、补货麻烦。无人售货柜换了个思路扫码开门→自由拿取→关门自动结算本质就是把货柜变成了迷你无人超市。核心交互流程用户用微信小程序扫描柜体上的二维码柜门弹开用户自由拿取商品用户关上柜门系统通过重力传感器/RFID/视觉识别判断拿了什么自动从用户微信支付中扣款这套流程看着简单背后涉及设备控制、实时通信、商品识别、订单结算、支付对接等多个技术域是一个典型的IoT微服务综合项目。二、整体架构四端协同整个系统分为四端各司其职端技术职责设备端RK3588 Android工控板柜门控制、商品识别、状态上报小程序端微信小程序扫码开柜、订单展示、支付授权后台管理Vue3 ElementPlus设备管理、商品管理、数据看板微服务后端SpringCloud Alibaba业务逻辑、数据持久、消息通信2.1 分层架构总览从上到下分为五层┌─────────────────────────────────────────────┐ │ 接入层客户端 │ │ 微信小程序 │ Vue后台管理 │ 设备端App │ ├─────────────────────────────────────────────┤ │ 网关层Gateway │ │ SpringCloud Gateway JWT鉴权 │ ├─────────────────────────────────────────────┤ │ 服务层微服务集群 │ │ 设备服务│商品服务│库存服务│订单服务│支付服务 │ │ 用户服务│统计服务 │ ├─────────────────────────────────────────────┤ │ 中间件层 │ │ Nacos(注册配置)│Redis(缓存)│RocketMQ(消息) │ │ Seata(分布式事务)│Sentinel(限流)│MinIO(存储) │ ├─────────────────────────────────────────────┤ │ 数据层 │ │ MySQL(业务数据每服务独占库) │ └─────────────────────────────────────────────┘三、微服务拆分策略微服务拆分的核心原则按业务领域拆不按技术功能拆。每个服务独占数据库通过接口通信避免跨库Join。3.1 七大微服务服务名职责核心表device-service设备注册、心跳、指令下发device, device_commandproduct-service商品CRUD、分类管理product, product_categorystock-service库存管理、变动日志stock, stock_logorder-service订单创建、状态流转order, order_detailpay-service微信支付、退款回调payment, payment_refunduser-service用户登录、地址管理user, user_addressstats-service销售统计、数据看板从各服务同步数据3.2 为什么这么拆设备服务独立设备通信是高频IO操作MQTT长连接和业务逻辑解耦库存服务独立库存扣减是高并发热点需要独立扩容订单和支付分离支付有回调延迟不能阻塞订单流程统计服务独立统计是读密集型可以独立做读写分离四、技术栈选型4.1 后端技术栈类别技术选型理由框架SpringBoot 3.xJava 17性能提升明显微服务SpringCloud Alibaba国产生态文档友好注册中心Nacos注册配置二合一网关SpringCloud Gateway响应式性能优于Zuul限流降级Sentinel接口级限流熔断降级分布式事务SeataAT模式对业务侵入小消息队列RocketMQ支持事务消息适合订单场景缓存Redis 7设备状态缓存、分布式锁数据库MySQL 8分库存储每服务独占ORMMyBatis-Plus代码简洁分页插件好用4.2 设备端技术设备端是整个项目的手和眼技术选型很关键主控板RK3588 Android工控板八核A76A55支持8路摄像头跑Android 12通信方式MQTT协议长连接EMQX作为Broker柜门控制串口Serial控制电磁锁Android通过串口API发送开锁指令商品识别视觉方案YOLOv8模型 重力传感器双校验4.3 小程序端框架原生微信小程序性能优先不上Uni-app扫码wx.scanCode扫描柜体二维码实时状态WebSocket连接网关接收开柜/关门/结算结果推送支付微信支付JSAPI先签约免密代扣再扣款4.4 后台管理框架Vue3 Vite TypeScriptUIElementPlus权限RBAC模型动态路由菜单图表ECharts设备分布地图销售趋势看板五、数据流走向以用户扫码开柜→拿商品→关门结算为例完整数据流用户扫码 │ ▼ 小程序 → Gateway网关(JWT鉴权) │ ▼ order-service: 预创建订单(状态OPENING) │ ├─ Feign调用 device-service: 下发开柜指令 │ │ │ ▼ │ device-service → MQTT → 设备端 → 电磁锁开门 │ ├─ WebSocket通知小程序: 柜门已开 │ ▼ (用户拿商品...关门) │ 设备端 → MQTT → device-service: 上报关门识别结果 │ ▼ order-service: 更新订单明细计算总价 │ ▼ pay-service: 调用微信支付扣款 │ ├─ 支付成功 → order-service: 订单状态PAID │ └─ WebSocket通知小程序: 支付成功展示账单六、项目里程碑规划阶段内容产出P0基础设施搭建Nacos/Gateway/公共模块P1设备接入注册心跳指令通信跑通P2核心业务商品库存订单支付P3用户端小程序扫码全流程P4后台管理Vue后台数据看板P5上线优化压测Sentinel限流灰度发布七、小结无人售货柜项目本质是一个IoT设备控制 微服务业务处理的双线作战项目。设备端管物理世界微服务端管数字世界中间靠MQTT这座桥连通。架构设计阶段最关键的是微服务拆分粒度——拆太粗失去意义拆太细调用链爆炸。本文的七服务拆法是经过实战验证的平衡点既保证业务清晰又不会过度设计。