基于 Redis、Netty、Websocket 实现红包雨活动
红包雨活动
需求背景
支撑营销活动,拉新,提升品牌影响;红包是花币或者实物奖品,活动后线下找运营同事兑换。
参考成熟技术实现方案:
基于 Netty NIO 实现以较少资源支持更多的并发连接.
基于 Websocket 实现双工通信,客户端可以请求,服务端可以反向推送数据.
实现逻辑
一、运营管理台配置完数据,持久化活动数据、红包数据到 MySQL
二、初始化数据和定时任务
初始化接口: 缓存红包数据到 Redis,Hash 结构,Key 是活动 ID,Value 中哈希结构 key:红包对象 ID value:序列化的红包对象.
更新、删除接口: Redis 中红包数据的.
设置 Quartz 定时任务
三、红包具体接口
查询红包雨活动:用户进入场景,发现红包发射器,客户端连接 netty+ webSocket,马上调用该接口。查询当前场景是否存在活动.
红包雨活动倒计时: 用户查询过红包雨活动后,会登记进入本红包雨场景。
红包雨活动红包信息: 当红包雨活动开始后,服务端会服务端会以 1 次/秒的频率向端侧推送红包雨信息.
红包雨活动结束: 当红包雨活动结束后,服务端会向端侧推送一条红包雨结束消息.
抢红包: set ex nx 加分布式锁抢红包,锁也是 Hash 结构缓存在 Redis
推送红包被抢消息: 当同场次其他用户抢红包后,服务器向用户推送某些红包已经被抢走的消息。 业务服务 (Netty, Websocket)向 Kafka 发送消息,同时每个业务服务订阅 Kafka, consumer group id 设置唯一以作广播效果,消费消息后向连接到本服务的客户端推送 “红包被抢消息”,客户端接收消息后对被抢红包实现视觉效果(爆炸、拆开等).
作者:Redfisky
链接:https://juejin.cn/post/6948668223751454733
来源:掘金
评论