springcloud(四) - 服务治理Hystrix
功能介绍
调用下游服务,下游因为超时、异常等原因报错的时候。hystrix保证不会出现整体异常,避免雪崩。主要策略是服务的熔断、降级
应用场景
降级:异常、超时、熔断等情况发生后,不让客户端等待返回友好提示
熔断:访问量和失败数量到达设置的数值后,返回友好提示拒绝访问
server端降级
<!-- jar包依赖 -->
<!--hystrix-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency> //启动类支持Hystrix
@SpringBootApplication
@EnableEurekaClient //本服务启动后会自动注册进eureka服务中
@EnableCircuitBreaker//开启Hystrix
public class PaymentHystrixMain8001 {
public static void main(String[] args) {
SpringApplication.run(PaymentHystrixMain8001.class, args);
}
} //方法执行时间超过3秒,则降级处理
/**
* 超时访问,演示降级
* execution.isolation.thread.timeoutInMilliseconds超时阈值设置
* @param id
* @return
*/
@HystrixCommand(fallbackMethod = "paymentInfo_TimeOutHandler", commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "3000")
})
public String paymentInfo_TimeOut(Integer id) {
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "线程池:" + Thread.currentThread().getName() + "paymentInfo_TimeOut,id: " + id + "\t" + "O(∩_∩)O";
} public String paymentInfo_TimeOutHandler(Integer id) {
return "/(ㄒoㄒ)/调用支付接口超时或异常:\t" + "\t当前线程池名字" + Thread.currentThread().getName();
}
客户端降级参考:https://blog.csdn.net/qq_41539088/article/details/127681581
熔断
熔断的三大参数:
快照时间窗:触发熔断器的周期时间,默认10s
请求总阀值:在快照时间窗内,请求到达某个数量后,才会开启熔断器。假设这个数量设置为20,如果十秒内只发生了19次请求 ,即便都失败了,也不会打开熔断器。
错误百分比阀值:请求错误率到达阀值后,才会开启熔断器。比如10s内发起40次请求,30次失败了,二设置的总阀值为50%,则会开启熔断器。
服务监控hystrixDashboard
以图片报表的方式展示给用户,每秒执行了多少请求、多少失败等
<!-- 添加依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency> <!-- 需要监控的项目 -->
<!-- actuator监控信息完善 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency> //启动类添加监控器支持
@SpringBootApplication
@EnableHystrixDashboard
public class HystrixDashboardMain9001{
public static void main(String[] args){
SpringApplication.run(HystrixDashboardMain9001.class,args);
}
}
springcloud(四) - 服务治理Hystrix的更多相关文章
- SpringCloud微服务治理技术入门(SCN)
1.集群.分布式.微服务 首先先理解三个感念 什么是集群?: 同一个业务,部署在多个服务器上,目的是实现高可用,保证节点可用! 什么是分布式?: 一个业务分拆成多个子业务,部署在不同的服务器上,每个子 ...
- 微服务之SpringCloud实战(二):SpringCloud Eureka服务治理
服务治理 SpringCloud Eureka是SpringCloud Netflix微服务套件的一部分,它基于Netflix Eureka做了二次封装,主要完成微服务的服务治理功能,SpringCl ...
- springCloud eureka服务治理集群增加安全认证
做为SpringCloud Netflix服务套件中的一部分,springCloud eureka基于Netflix Eureka做了二次封装,默认提供WEB管理页面及服务治理. 为了确保在生产环境中 ...
- springcloud(四):熔断器Hystrix
说起springcloud熔断让我想起了去年股市中的熔断,多次痛的领悟,随意实施的熔断对整个系统的影响是灾难性的,好了接下来我们还是说正事. 熔断器 雪崩效应 在微服务架构中通常会有多个服务层调用,基 ...
- SpringCloud(四):服务注册中心Eureka Eureka高可用集群搭建 Eureka自我保护机制
第四章:服务注册中心 Eureka 4-1. Eureka 注册中心高可用集群概述在微服务架构的这种分布式系统中,我们要充分考虑各个微服务组件的高可用性 问题,不能有单点故障,由于注册中心 eurek ...
- SpringCloud微服务(04):Turbine组件,实现微服务集群监控
本文源码:GitHub·点这里 || GitEE·点这里 写在前面,阅读本文前,你需要了解熔断器相关内容 SpringCloud微服务:Hystrix组件,实现服务熔断 一.聚合监控简介 1.Dash ...
- springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin
相信现在已经有很多小伙伴已经或者准备使用springcloud微服务了,接下来为大家搭建一个微服务框架,后期可以自己进行扩展.会提供一个小案例: 服务提供者和服务消费者 ,消费者会调用提供者的服务,新 ...
- Spring Cloud实战之初级入门(四)— 利用Hystrix实现服务熔断与服务监控
目录 1.环境介绍 2.服务监控 2.1 加入依赖 2.2 修改配置文件 2.3 修改启动文件 2.4 监控服务 2.5 小结 3. 利用hystrix实现消费服务熔断 3.1 加入服务熔断 3.2 ...
- springcloud微服务实战:Eureka+Zuul+Ribbon+Hystrix+SpringConfig
原文地址:http://blog.csdn.net/yp090416/article/details/78017552 springcloud微服务实战:Eureka+Zuul+Ribbon+Hyst ...
- SpringCloud微服务(基于Eureka+Feign+Hystrix+Zuul)
一.搭建注册中心 1.1.创建一个cloud-service项目 1.2:POM文件依赖 1 <?xml version="1.0" encoding="UTF-8 ...
随机推荐
- 安卓逆向.5 xposed 替换方法-(实战贪吃蛇)
代码剖析 调用成功方法 获取类 方法写入 实战例子(贪吃蛇)
- 从零实现在线云相亲APP|程序员脱单神器(内附源码Demo)
实时音视频通话涉及到的技术栈.人力成本.硬件成本非常大,一般个人开发者基本无法独立完成一个功能健全并且稳定的实时音视频应用.本文介绍一天之内,无任何实时音视频低层技术的android开发者完成实时相亲 ...
- Computed 和 Watch 的区别
1.computed计算属性: 作用:(1)解决模板中放入过多的逻辑会让模板过重且难以维护的问题.例如两个数据的拼接或字体颜色的判断. (2)它支持缓存,只有依赖的数据发生了变化,才会重新计算.例如模 ...
- Luffy项目:2、项目需求(2),项目库的创建,软件开发目录,Django配置文件介绍
目录 Luffy项目 一.Luffy项目需求(2) 1.后台日志封装 2.全局异常处理.封装 3.封装Response对象 二.Luffy项目数据库创建 1.创建用户数据库 2.使用项目链接数据库 2 ...
- 前端回血day24 flex子项伤的CSS属性
取值 含义 order 可以通过设置order改变某一个flex子项的排序位置.所有flex子项的默认order属性值是0 flex-grow 属性中的grow是扩展的意思,扩展的就是flex子项所占 ...
- react 02 组件state click
一,组件 import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; // 函数式组件 ret ...
- x-sheet 开发系列教程:初始化配置
介绍 x-sheet 是一款高性能 Web JavaScript Canvas 电子表格,之前小编写过一篇 x-sheet 入门体验,简单介绍了一下如何使用 x-sheet.这次我们继续深入一下,了解 ...
- vue项目引用vue-pdf打包多出worker.js文件
问题描述:项目要用到pdf预览功能,因为是vue项目就是直接导入了vue-pdf组件,但是在进行打包的时候在dist文件夹下面多个worker.js文件,导致项目部署后预览pdf直接报了404 方案一 ...
- 向mysql插入数据报错 pymysql.err.DataError: (1406, "Data too long for column 'class' at row 1") 解决方案
这个问题一开始更换数据类型或者数据类型的大小,发现还是不行.后面通过网上查询了一条神奇的sql语句分分钟钟的解决了 问题原因明明是: 字段的长度不够存放数据 解决方案: 在mysql命令行输入如下:S ...
- quasar+vue、Input组件绑定两个值
项目中关于一个只读input绑定两个值,例如input显示取值范围,通过查看vue及quasar文档找出解决方法,如下代码: <q-input v-bind:value="`${det ...