服务与接口分析
用户服务
- 注册
- 登录
- 密码修改
- 头像修改
- 账户注销
电影服务
- 查看电影详情
- 增加电影
- 通过类别查看电影列表
- 查看演员详情
- 查看某电影演员列表,redis->mysql
影院服务
- 增加排片
- 查看影院列表(分页)
- 查看影院详情
- 查看排片列表
- 获取座位信息
- 订票,更新座位信息
- 退票,更新座位信息
订单服务
- 添加订单
- 取消订单
- 延时队列来实现订单超时未支付问题
评论服务
- 增加评论
- 删除评论
搜索服务
- 全文检索
文件服务
- 上传文件
秒杀服务
- 基于redis实现分布式锁
组件分析
- 基于SpringCloudAlibaba整合其他组件
- 数据库采用MySQL
- 数据访问层使用Mybatis+Mybatisplus
- 服务调用方面使用OpenFeign声明式调用(同步),使用rabbiyMQ进行异步调用
- 注册中心与配置中心使用nacos
- 网关使用gateway
- 搜索使用elk,所有查询都由ElasticSearch提供
- 秒杀使用redis分布式锁
- 分布式事务使用seata
- 任务调度使用quartz
问题总结
- 配置redis集群后,从rdm和redisson中都无法连接到redis,rdm报错无法连接节点6380,Java报错没有下一步信息;且Java中配置的redis主机IP在连接是变成了127.0.0.1
由于在搭建redis集群,redis-cli --cluster create后接host:port写的是127.0.0.1,所以只有从127.0.0.1地址才能连接到集群,127.0.0.1和本机ip不是完全可以当作一个ip使用的
- 手动往redis中存数据时,使用redissonClient取数据报协议不支持的异常
由于redissonClient存取数据时根据协议进行编码和解码,如果手动存不符合解码格式,报错
- redis分布式锁的watchdog如果自动续期,为什么不会导致死锁
看门狗的目的是避免锁到期了而业务程序还没有结束的情况,默认有30秒的限期,每次延长10s,超过三十秒则看门狗也不会再起作用
- 分布式id的解决
本来使用redis存放序列,然后通过序列来解决分布式id问题,但是考虑到数据库访问次数太过频繁,改用百度的分布式id框架uid-generator
- 认证中心的实现
使用gateway网关整合jwt做认证中心,每次签发token签发两个,一个token30分钟,一个refreshToken60分钟,当token过期,使用refreshToken来刷新token
- 使用seata实现分布式事务,对日期datetime类型会json传唤错误
将数据库的datetime类型改为timestamp类型即可
- rabbitMQ报错Only one ConfirmCallback is supported by each RabbitTemplate(每个RabbitTemplate只支持一个ConfirmCallback)
callback是rabbitTemplate的一个属性,如果在处理请求时设置那么由于rabbitTemlate是单例的,重复设置就会报这个错,将callback实现注入到rabbitTemlate中在启动时加载一次即可(或将rabbitTemlate改为原型的)