前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式电商系统的设计与实现⑥-3

分布式电商系统的设计与实现⑥-3

原创
作者头像
会洗碗的CV工程师
发布2024-06-21 17:52:42
760
发布2024-06-21 17:52:42
举报
文章被收录于专栏:毕业设计毕业设计

接下来,我会将整篇毕设论文放上该专栏,其中按照论文提纲主要分为八大部分。每一部分单独列出一篇文章。 这一篇就是论文的第五部分系统详细设计与实现。因为该部分内容比较多,避免大家审阅疲劳,分为3个文章来进行解读。这里是该章节最后一部分,中括号代表的是参考文献,后面会有列出来

1.1 秒杀功能详细设计与实现

作为最核心的秒杀功能,主要在于能够保证用户抢购商品时的流畅性,为了能够让用户更快地获取秒杀商品,前台用户的秒杀商品都是通过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

1.2 文件上传功能

文件上传功能使用了FastDFS处理文件上传,在服务器安装FastDFS之后并对其所具有trackerd跟踪服务和stoarged存储服务的配置文件进行修改,自定义修改文件存储路径。并使用Nginx进行反向代理。且在nginx配置文件中进行配置FastDFS,在服务器中配置如下:

代码语言:bash
复制
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

1.3 短信功能的设计与实现

首先,短信功能是基于阿里云短信服务[47]SDK来实现的。因此只需要按照相关SDK配置进行使用即可,但是这是个人账号,发送短信的手机号需要先绑定,而且最多只能绑定五个手机号进行测试。且是不能自定义短信签名模板。只能按照下面相关规定,先根据AK初始化账号Client,AK就是阿里短信服务的AccessKey,用户运行通过的key,这个key在阿里短信服务控制台可以生成属于自己账号的key。初始化账号Client成功之后,再进行设置请求签名模板,这个是约定的。无法更改。程序流程图如下图5-20所示:

图 5-20 短信验证流程图

1.4 使用RabbitMQ优化购物车更新和商品搜索

这里使用到了RabbitMQ作为消息中间件,减低了服务之间的耦合,该主要用途是当管理员在后台对应商品信息进行更新时,或者商品上下架的时候,前台用户由于访问量比较大,故不可能直接从数据库进行查,这时候就使用到了RabbitMQ作为消息队列,当用户修改商品时,将修改后的商品往队列中存,然后当RabbitMQ监听器监听到之后,就执行相应的方法更新前台用户所展示的商品数据。这里以当用户修改商品时,修改购物车商品信息为例进行分析:

首先在RabbitMQConfig配置类定义交换机名称,以及向购物车同步商品消息队列名称。

然后创建GOODS_EXCHANGE交换机以及SYNC_CART_QUEUE消息队列,然后交换机绑定同步购物车队列。在商品服务模块如果修改了商品信息,则往修改方法添加以下代码段,往RabbitMQ上发送队列信息,在购物车服务模块监听该同步购物车SYNC_CART_QUEUE消息队列,并执行更新购物车商品方法。

程序流程图如下图5-21所示:

图5-21购物车同步商品消息队列程序流程图

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1 秒杀功能详细设计与实现
  • 1.2 文件上传功能
  • 1.3 短信功能的设计与实现
  • 1.4 使用RabbitMQ优化购物车更新和商品搜索
相关产品与服务
短信
腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档