业务场景
1、C 端扫码收款后,要求商家APP或音箱设备播报语音。
2、商家收银成功后,商家 APP 的订单列表及时提醒有新订单
3、远程推送指令给设备(获取设备端日志、网络检测、版本升级、应用卸载、关闭、重启)
一、基于 redis 队列实现推送
1、如何保证队列及时消费?多线程消费 + 队列堆积监控,及时消费保证消息不堆积
2、通过 http异步上报推送结果(也可以采用 kafka,看具体场景),及时分析送达率
image.png
二、websocket + netty 实现推送
1、如何记录设备连接到那个实例上? 在 redis 中记录clientId->conn,clientId->host
2、推送消息时,查询设备连接的hostId,在 redis 中建立 hostId 的队列,然后将消息发送到队列
3、设备连接后,消费 redis 队列,获取连接对象发送
4、设备断线重连后,优先查询上次连接的队列,消息历史消息,然后监听新的队列
image.png
三、基于 rabbitmq 的消息队列
1、设备通过 mqtt 协议直接 rabbitmq,建立队列同时监听队列,接收队列的消息
2、推送接口构建 routekey,发现消息到指定的队列
image.png
网友评论