接下来,我会将整篇毕设论文放上该专栏,其中按照论文提纲主要分为八大部分。每一部分单独列出一篇文章。 这一篇就是论文的第五部分系统详细设计与实现。因为该部分内容比较多,避免大家审阅疲劳,分为3个文章来进行解读。这里是该章节最后一部分,中括号代表的是参考文献,后面会有列出来
作为最核心的秒杀功能,主要在于能够保证用户抢购商品时的流畅性,为了能够让用户更快地获取秒杀商品,前台用户的秒杀商品都是通过Redis中获取,并且使用Spring Boot定时任务,每隔五秒将Redis的商品数据和MySQL数据库中的数据进行交互,保证数据的有效性。
程序流程图如下图5-17所示:
图 5-17 定时查询秒杀商品流程图
而有用户进行购买或者生成订单时,那么剩余库存数要进行一个修改。并且同步到MySQL中。那么这里就是需要设置一个redis监听器,因为秒杀商品的订单有效期为1分钟,如果1分钟到了用户还没有付款,则redis缓存将失效。而过期事件需要回退商品库存,必须拿到value即订单详情,才能拿到商品数据,进行回退操作。我们保存一个订单副本,过期时间长于原订单,此时就可以通过副本拿到原订单数据,在创建订单的时候,会往redis存两条订单信息,如以下代码所示:
// 设置订单一分钟过期
redisTemplate.opsForValue().set(orders.getId(),orders,1, TimeUnit.MINUTES);
/**
* 给订单创建副本(两分钟过期)
* 副本的过期时间长于原订单
* redis过期后出发过期事件时, redis数据已经过期,此时只能拿到key,拿不到value
* 而过期事件需要回退商品库存,必须拿到value即订单详情,才能拿到商品数据,进行回退操作
* 我们保存一个订单副本,过期时间长于原订单,此时就可以通过副本拿到原订单数据
*/ redisTemplate.opsForValue().set(orders.getId()+"_copy",orders,2,TimeUnit.MINUTES);
然后商品如果订单有效期到了还没有付款,则触发redis监听器,获取失效订单key,也就是订单id,然后再从redis副本获取原来的订单详情,再将数据回退到数据库,程序流程图如下图5-18所示:
图 5-18
文件上传功能使用了FastDFS处理文件上传,在服务器安装FastDFS之后并对其所具有trackerd跟踪服务和stoarged存储服务的配置文件进行修改,自定义修改文件存储路径。并使用Nginx进行反向代理。且在nginx配置文件中进行配置FastDFS,在服务器中配置如下:
server {
listen 80;
server_name localhost;
location ~ /group[1-3]/M00 {
alias /data/fastdfs/storage/data;
ngx_fastdfs_module;
}
}
其中alias /data/fastdfs/storage/data表示上传到的文件存储路径。接下来我们需要在项目中使用该服务。首先要注入FastFileStorageClient对象,进行文件上传。其实Spring Boot文件上传也有相关对象,比如MultipartFile对象,但是该类对象不能在服务间传递,因此接收前端传过来的文件对象使用getBytes将其转化为字节数组,然后在相关方法中将字节数组转化为输入流,然后使用fastFileStorageClient.uploadFile(args)方法进行上传,并且返回一个StorePath对象,可以使用该对象获取文件路径,关键代码如下图5-19所示:
图 5-19
首先,短信功能是基于阿里云短信服务[47]SDK来实现的。因此只需要按照相关SDK配置进行使用即可,但是这是个人账号,发送短信的手机号需要先绑定,而且最多只能绑定五个手机号进行测试。且是不能自定义短信签名模板。只能按照下面相关规定,先根据AK初始化账号Client,AK就是阿里短信服务的AccessKey,用户运行通过的key,这个key在阿里短信服务控制台可以生成属于自己账号的key。初始化账号Client成功之后,再进行设置请求签名模板,这个是约定的。无法更改。程序流程图如下图5-20所示:
图 5-20 短信验证流程图
这里使用到了RabbitMQ作为消息中间件,减低了服务之间的耦合,该主要用途是当管理员在后台对应商品信息进行更新时,或者商品上下架的时候,前台用户由于访问量比较大,故不可能直接从数据库进行查,这时候就使用到了RabbitMQ作为消息队列,当用户修改商品时,将修改后的商品往队列中存,然后当RabbitMQ监听器监听到之后,就执行相应的方法更新前台用户所展示的商品数据。这里以当用户修改商品时,修改购物车商品信息为例进行分析:
首先在RabbitMQConfig配置类定义交换机名称,以及向购物车同步商品消息队列名称。
然后创建GOODS_EXCHANGE交换机以及SYNC_CART_QUEUE消息队列,然后交换机绑定同步购物车队列。在商品服务模块如果修改了商品信息,则往修改方法添加以下代码段,往RabbitMQ上发送队列信息,在购物车服务模块监听该同步购物车SYNC_CART_QUEUE消息队列,并执行更新购物车商品方法。
程序流程图如下图5-21所示:
图5-21购物车同步商品消息队列程序流程图
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。