项目介绍:随着智能手机和高速互联网的普及,人们开始寻求更便捷的方式来获取信息和娱乐。 在过去,有声书主要是由专业的演员朗读,制作成录音带或CD。但随着数字化媒体的发展,听书软件应运而生,为用户提供了更多选择,包括自助出版的有声书和多样化的内容。总的来说,听书软件的开发推动了阅读体验的数字化和个性化,为用户提供了更加便捷、多样化的阅读方式,也促进了作家和内容创作者的创作和传播。
主要业务模块:专辑管理模块、搜索管理模块、订单管理模块、账号管理模块、支付管理模块、会员管理模块、权限管理模块
技术选型: SpringBoot+SpringCloud Alibaba、MyBatis-Plus、MySQL、Redis、Redisson、MongoDB、Kafka、ElasticSearch、MinIO、Docker、Jenkins
负责模块:
模块名称:登录模块
功能描述:用户使用微信小程序进行登录或者是账号密码登录。
实现细节:从redis获取token,若无,则去数据库中查询,存在就获取信息并存入到Redis中,设置过期时间。
不存在数据库就添加用户信息。
挑战和问题解决:判断是否需要用户登录,使用自定注解+AOP赋能,包含是否登录的属性required,在定义的切
面类中使用@before前置通知获取HTTP参数中的token,到redis中查询,来判断用户是否登录。如果已登录,则
使用ThreadLocal把登录信息与当前线程绑定,传递给后续业务。如果未登录,则提示需要登录。
模块名称:专辑管理模块
功能描述:文件上传、专辑的增删改查以及专辑详细页面展示。
实现细节:使用MinIO进行文件上传,专辑的增删改,先去更改MySQL数据库,然后用kafka发送消息更改es中的数据
挑战和问题解决:处理专辑详情页的高并发请求和缓存数据的管理,使用布隆过滤器、分布式锁防止缓存的击穿、穿透等问题,用添加随机过期时间解决雪崩问题。
模块名称:订单管理模块
功能描述:从专辑详情页选择购买VIP、购买专辑和购买声音,实现订单创建功能,使用Redisson的延迟队列取消超时未支付的订单。
实现细节:
1、订单的创建过程中,通过生成全局唯一的订单编号以及Redis实现订单创建接口的幂等性;
2、通过分布式锁确保了锁定金额过程中的数据的一致性,避免了用户重复扣款情况的发生;