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