文章插图
访问流程

文章插图
**注意**
在使用jmeter测试的时候 需要启动两个服务
- 在启动第一个之后 去修改pom里面的build里面tomcat插件的端口 8002
- 记得要刷新pom文件 , 然后再打包启动即可
简单阐述一下:我们会模拟高并发场景下对这个商品的库存进行扣减下载地址
这也就会导致一个问题 , 会出现商品超卖(出现负的库存)出现的原因: 在同一时间 , 访问的请求很多 。
解压双击jmeter.bat启动

文章插图
创建线程组

文章插图
【阿里3个小时手把手教你用zookeeper实现分布式锁】这里的线程数量根据自己电脑去设置创建请求

文章插图
我们填写红框的内容即可就是访问的地址
- 我们还需要查看请求的结果 创建结果树 右击会出现

文章插图
配置好这些之后 , 点击菜单栏绿色启动标志
- 会出现弹窗 第一个点yes 第二个点cancel(取消)
- 没有启动前数据库的库存
- 可以看到 出现了 超卖

文章插图
解决超卖
需要用到 zookeeper集群 , 搭建的文章zookeeper分布式锁不需要我们手写去实现 , 有封装好的依赖 , 引入即可
xml
<dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>4.2.0</version> <!-- 网友投票最牛逼版本 --></dependency>在控制层中加入分布式锁的逻辑代码- 添加了集群的ip
/** * @author : look-word * 2022-07-17 10:12 **/@RestControllerpublic class ProductAction {@Resourceprivate ProductService productService;// 集群ipprivate String connectString = "192.168.77.132,192.168.77.131,192.168.77.130";@GetMapping("product/reduce/{id}")private Object reduce(@PathVariable Integer id) throws Exception {// 重试策略 (1000毫秒试1次 , 最多试3次)RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);//1.创建curator工具对象CuratorFramework client = CuratorFrameworkFactory.newClient(connectString, retryPolicy);client.start();//2.根据工具对象创建“内部互斥锁”InterProcessMutex lock = new InterProcessMutex(client, "/product_" + id);try {//3.加锁lock.acquire();productService.reduceStock(id);} catch (Exception e) {if (e instanceof RuntimeException) {throw e;}} finally {//4.释放锁lock.release();}return "ok";}}启动jmeter去测试 , 会发现 , 请求就像排队一样 , 一个一个出现 , 数据库也没有超卖现象- 可以看到 只有前面的5课请求成功了 , 我们的库存只有5个
- 说明我们的分布式锁 , 已经实现了
原文链接:
https://www.cnblogs.com/look-word/p/16488623.html
推荐阅读
- 老人临死前几小时有哪些征兆?
- 包粽子糯米要泡多长时间?
- 微软|1MHz频率的CPU跑Win7 启动7个半小时后果断蓝屏
- 招聘|除了公务员,这3个岗位更适合女生报考,转正有编制!
- 公路|新疆独库公路变“堵哭公路” 100公里走8小时:自驾游暴增、民宿近2W一晚
- 美媒:拜登哈里斯即将发表演讲-拜登2小时后发表新总统上任演讲
- 丰巢柜滞留多久要收费?
- 高三女生写13个对不起后自杀-女生写13个对不起
- 河南|深圳某工厂员工,刚进厂两个小时就自离,老板当场发火:气死我了
- 高三女生写13个对不起后自杀-高中学生压力大自残怎么办
