尚硅⾕2020周阳⽼师SpringCloud学习整理笔记第⼆部分
第⼀部分:
经过5天的学习,⽬前学到了P92,刚刚结束了SpringCloud Stream,由于还有⼀些别的事情所以进度有点慢,笔记也整理得有点潦草。第⼀部分篇幅逐渐臃肿,故下⾯的笔记,分享于这篇博客。
笔记供⾃⼰⽇后复习,若有需要也供⼤家参考。若有不⾜,还请指正。
⼗三、Hystrix
Hystrix介绍
在微服务场景中,通常会有很多层的服务调⽤。如果⼀个底层服务出现问题,故障会被向上传播给⽤户。我们需要⼀种机制,当底层服务不可⽤时,可以阻断故障的传播。这就是断路器的作⽤。他是系统服务稳定性的最后⼀重保障。
在springcloud中断路器组件就是Hystrix。Hystrix也是Netflix套件的⼀部分。他的功能是,当对某个服务的调⽤在⼀定的时间内(默认10s),有超过⼀定次数(默认20次)并且失败率超过⼀定值(默认50%),该服务的断路器会打开。返回⼀个由开发者设定的fallback。
fallback可以是另⼀个由Hystrix保护的服务调⽤,也可以是固定的值。fallback也可以设计成链式调⽤,先执⾏某些逻辑,再返回fallback。
Hystrix的作⽤
1. 对通过第三⽅客户端库访问的依赖项(通常是通过⽹络)的延迟和故障进⾏保护和控制。
2. 在复杂的分布式系统中阻⽌级联故障。
3. 快速失败,快速恢复。
4. 回退,尽可能优雅地降级。
5. 启⽤近实时监控、警报和操作控制。
官⽹:
参考博客:
服务降级
三种情况:
1. 访问超时
2. 运⾏错误
3. 宕机
实例代码:
* 访问超时
*
* @param id
* @return
*/
@HystrixCommand(fallbackMethod = "paymentInfo_TimeOutHandler", commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "3000")validation框架
})
public String paymentInfo_TimeOut(Integer id) {
int timeNumber = 5;
try {
TimeUnit.SECONDS.sleep(timeNumber);
} catch (Exception e) {
e.printStackTrace();
}
return "线程池:" + Thread.currentThread().getName() + "paymentinfo_Timeout,id:" + id + "\t" + "耗时(秒)" + timeNumber; }
private String paymentInfo_TimeOutHandler(Integer id) {
return "线程池:" + Thread.currentThread().getName() + "paymentInfo_TimeOutHandler,id:" + id + "\t";
}
主启动类
@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker
public class PaymentHystrixMain8001 {
public static void main(String[] args) {
SpringApplication.run(PaymentHystrixMain8001.class, args);
}
}
问题:
1、每个⽅法有⼀个对应的处理⽅法,代码膨胀。
2、处理⽅法和主业务逻辑混合在⼀起
解决⽅案:
@DefaultProperties(defaultFallback="")
1、类上加上注解:
@RestController
@RequestMapping("/consumer")
@DefaultProperties(defaultFallback = "payment_Global_FallbackMethod")
public class OrderHystrixController {
2、默认全局处理⽅法
* 全局fallback⽅法
*
* @return
*/
private String payment_Global_FallbackMethod() {
return "Global异常处理信息,请稍后再试。";
}
3、@HystrixCommand//不加属性代表使⽤默认的全局处理⽅法。
服务熔断
//====服务熔断
/**
* 在10秒窗⼝期中10次请求有6次是请求失败的,断路器将起作⽤
*
* @param id
* @return
*/
@HystrixCommand(
fallbackMethod = "paymentCircuitBreaker_fallback", commandProperties = {
@HystrixProperty(name = "abled", value = "true"),// 是否开启断路器
@HystrixProperty(name = "questVolumeThreshold", value = "10"),// 请求次数
@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "10000"),// 时间窗⼝期/时间范⽂
@HystrixProperty(name = "ThresholdPercentage", value = "60")// 失败率达到多少后跳闸
}
)
public String paymentCircuitBreaker(@PathVariable("id") Integer id) {
if (id < 0) {
throw new RuntimeException("*****id不能是负数");
}
String serialNumber = IdUtil.simpleUUID();
return Thread.currentThread().getName() + "\t" + "调⽤成功,流⽔号:" + serialNumber;
}
public String paymentCircuitBreaker_fallback(@PathVariable("id") Integer id) {
return "id 不能负数,请稍后重试,o(╥﹏╥)o id:" + id;
}
Hystrix断路器使⽤时最常⽤的三个重要指标参数
在微服务中使⽤Hystrix 作为断路器时,通常涉及到以下三个重要的指标参数(这⾥是写在@HystrixProperties注解中,当然实际项⽬中可以全局配置在yml或properties中)
1、circuitBreaker.sleepWindowInMilliseconds
断路器的快照时间窗,也叫做窗⼝期。可以理解为⼀个触发断路器的周期时间值,默认为10秒(10000)。
2、questVolumeThreshold
断路器的窗⼝期内触发断路的请求阈值,默认为20。换句话说,假如某个窗⼝期内的请求总数都不到该配置值,那么断路器连发⽣的资格都没有。断路器在该窗⼝期内将不会被打开。
3、ThresholdPercentage
断路器的窗⼝期内能够容忍的错误百分⽐阈值,默认为50(也就是说默认容忍50%的错误率)。打个⽐⽅,假如⼀个窗⼝期内,发⽣了100次服务请求,其中50次出现了错误。在这样的情况下,断路器将会被打开。在该窗⼝期结束之前,即使第51次请求没有发⽣异常,也将被执⾏fallback逻辑。
综上所述,在以上三个参数缺省的情况下,Hystrix断路器触发的默认策略为:
在10秒内,发⽣20次以上的请求时,假如错误率达到50%以上,则断路器将被打开。(当⼀个窗⼝期过去的时候,断路器将变成半开(HALF-OPEN)状态,如果这时候发⽣的请求正常,则关闭,否则⼜打开)
⼗四、GateWay
暂时省略
⼗五、Spring Config
简介:在分布式系统中,由于服务数量巨多,为了⽅便服务配置⽂件统⼀管理,实时更新,所以需要分布式配置中⼼组件。Spring Cloud Config项⽬是就是这样⼀个解决分布式系统的配置管理⽅案。它包含了Client和Server两个部分,server提供配置⽂件的存储、以接⼝的形式将配置⽂件的内容提供出去,client通过接⼝获取数据、并依据此数据初始化⾃⼰的应⽤。
⼊门⽰例:
1、在github上新建⼀个仓库,如图所⽰
3、在本地新建git仓库并clone
4、新建开发、⽣产、测试配置⽂件,并提交到github 参考下图:
命令:git add .
git commit
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论