当前位置: 首页 > news >正文

谷粒商城实战(033 业务-秒杀功能4-高并发问题解决方案sentinel 1)

Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强

总时长 104:45:00 共408P

此文章包含第326p-第p331的内容


关注的问题

在这里插入图片描述

在这里插入图片描述

sentinel(哨兵)

sentinel来实现熔断、降级、限流等操作
在这里插入图片描述
腾讯开源的tendis,分布式缓存
第一辆车开太慢就会堵车

在这里插入图片描述
有的解释,降级是提供错误的一个兜底反馈,跟这个解释好像不太一样

在这里插入图片描述

sentinel学习

在这里插入图片描述

在这里插入图片描述

五种方法 我们一般使用第四种注解方法 第一种适配方法 第二种抛异常方法
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

步骤

在这里插入图片描述

  1. 引入sentinel包 在这里插入图片描述
    在这里插入图片描述
    控制台
    在这里插入图片描述
    查看调用的是哪个版本的sentinel
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这个jar包是个springboot项目 可以java -jar 直接启动

在这里插入图片描述
这个项目默认端口是8080 如果被占用的话 可以用 --server.port=你要的端口号
在这里插入图片描述
在这里插入图片描述

步骤

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

控制台操作方式

新增一个流控规则
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
再次刷新 进行限流
在这里插入图片描述
在这里插入图片描述

出现空指针异常 加一下判断即可
在这里插入图片描述
在这里插入图片描述

只要加了依赖 就都会被监控
在这里插入图片描述
在这里插入图片描述

暴露规则

在这里插入图片描述

全部暴露
在这里插入图片描述

添加审计图

导入endpoint依赖就可以使用统计图
在这里插入图片描述

exclude是排除哪些(不暴露)
include(暴露)
在这里插入图片描述

在这里插入图片描述

自定义流控返回

在这里插入图片描述
新增一个配置类
在这里插入图片描述

sentinel 提供的管理器类
在这里插入图片描述

如果用spring5的webFlux编程就用下面的 这里我们用上面的
在这里插入图片描述
定义一个错误码
在这里插入图片描述

在这里插入图片描述
乱码了 我们定义一下编码就行
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

全服务引入

每个服务都导入actuator 然后配置信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

错误

循环依赖错误
这里是用构造注入的方式解决循环依赖
在这里插入图片描述

在这里插入图片描述
解决:
在这里插入图片描述

注掉@postConstruct (它的作用是 方法会在bean实例化后被立即调用。)
在这里插入图片描述
在这里插入图片描述
这里解决失败,还是报错,我们自己创建一个rabbitTemplate在这里插入图片描述
这里的@Primary注解的作用: 用于指示一个类、方法或字段作为首选的候选对象。当应用于类时,@Primary注解表示该类是首选的候选对象,将优先被实例化。当应用于方法时,@Primary注解表示该方法是最优选的候选方法,将优先被调用。当应用于字段时,@Primary注解表示该字段是最优选的候选字段,将优先被访问。

我们定义的rabbitTemplate比别人的少一些配置 如下
在这里插入图片描述

还有一直解决方法

把@Bean注释的转换器和RabbitTemplate拆成两个文件,可以解决循环依赖


效果

走完流程后
在这里插入图片描述
在这里插入图片描述

流控效果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

warm up(热身)

在这里插入图片描述
在这里插入图片描述
峰值如果是500 我们使用 warm up(热身) :10秒内放进来500个请求
在这里插入图片描述

排队等待

如果峰值时是500 进来700个请求 我们先将前500进行处理 然后剩下的200 等待我们设置的如3000毫秒 如果3000毫秒得不到处理 就抛出失败

在这里插入图片描述在这里插入图片描述


相关文章:

  • idea如何使用git reset进行回退以及如何使用git stash将暂存区文件储藏,打包后重新恢复暂存区文件
  • 【EBS】通过SQL查找所有的定时请求
  • 【HarmonyOS】逻辑类中调用通用弹窗的处理
  • 旅游卡免费旅游的使用条件有哪些?
  • Python自动化测试框架:unittest与pytest的深度对比
  • Android ServiceManager和它的兄弟们
  • 来自中国信通院的认可!上海斯歌受邀加入“EP-Link 智能流程推进计划”
  • MongoDB UPDATE使用$setOnInsert为新插入数据设置默认值
  • 6.7.32 用于计算机辅助检测和诊断研究的精选乳房 X 线摄影数据集
  • 12. Django 第三方功能应用
  • 私有云数据库特征
  • AdroitFisherman模块测试日志(2024/6/10)
  • 动态内存管理学不懂,小代老师带你深入理解动态内存管理(下卷)
  • 堆和栈(heap and stack)
  • 汽车EDI——Volvo EDI 项目案例
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【Linux系统编程】快速查找errno错误码信息
  • 【mysql】环境安装、服务启动、密码设置
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • Android 架构优化~MVP 架构改造
  • Angular 响应式表单之下拉框
  • Docker入门(二) - Dockerfile
  • exif信息对照
  • Golang-长连接-状态推送
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • JavaScript 奇技淫巧
  • Java的Interrupt与线程中断
  • js如何打印object对象
  • k8s如何管理Pod
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Netty 4.1 源代码学习:线程模型
  • PAT A1092
  • Python学习之路16-使用API
  • Ruby 2.x 源代码分析:扩展 概述
  • select2 取值 遍历 设置默认值
  • Spring-boot 启动时碰到的错误
  • ⭐ Unity + OpenCV 实现实时图像识别与叠加效果
  • Vue 重置组件到初始状态
  • 大型网站性能监测、分析与优化常见问题QA
  • 我与Jetbrains的这些年
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 【云吞铺子】性能抖动剖析(二)
  • gunicorn工作原理
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • "无招胜有招"nbsp;史上最全的互…
  • #etcd#安装时出错
  • (13)Hive调优——动态分区导致的小文件问题
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (十二)Flink Table API