Hystrix服务降级的两种处理方式@HystrixCommand注解和定义统一fallback接口
项目地址: 链接:https://pan.baidu.com/s/1Mxo0ltvZbpz_r8mCU-mSpw
提取码:3j4a
问题答疑:
Hystrix服务保护框架,在微服务中Hystrix能够为我们解决哪些问题?
1.断路器
2.服务降级
3.服务熔断
4.服务隔离机制
5.服务雪崩效应 连环雪崩效应 如果严重的话,可能会导致整个微服务接口无法访问,所有服务器都会瘫痪.
基于Hystrix解决服务雪崩效应原理:
服务降级
1.在高并发的情况下,防止用户一直等待.使用服务降级方式(返回一个友好的提示直接给客户端,不会去处理请求,调用fallBack)
目的是为了用户体验.
2.场景:秒杀-----当前请求人数过多,请稍后尝试. (在tomcat中没有线程进行处理客户端请求的时候,不应该让用户一直转圈等待)
3.如果调用其他接口超时的时候(默认是1秒时间),如果在一秒钟没有及时响应返回的话,(默认情况下业务逻辑是可以执行的)则直接执行服务降级.
服务隔离机制
服务熔断目的是为了保护服务,在高并发情况下,如果请求达到了一定的极限(可以自己设置阈值).如果流量
超出了设置的阈值,自动开启保护服务功能,使用服务降级方式返回友好提示.熔断机制和服务降级一起使用.
服务熔断
隔离方式线程池和信号量隔离.
线程池隔离:每个服务接口都有自己独立的线程池,每个线程池互不影响,缺点:CPU占用率非常高.不是所有
的接口都去采用线程池隔离,核心关键接口.
源码地址 : 链接:https://pan.baidu.com/s/17-cFGA3fJFLF8gcnDZdWXg
提取码:1q9z 具体见解压说明文件
1.先说常用和推荐使用的一种方式: 定义统一fallback接口
1.pom.xml依赖
<!--Hystrix断路器-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2.application.properties配置文件
#指定运行端口
server.port=8200
#服务名称
spring.application.name=order
#获取注册实例列表
eureka.client.fetch-registry=true
#注册到Eureka的注册中心
eureka.client.register-with-eureka=true
#配置注册中心地址
#eureka.client.zhang.service-url.defaultZone=http://localhost:8001/eureka/
eureka.client.service-url.defaultZone=http://localhost:8000/eureka/#feign客户端建立连接超时时间
feign.client.config.default.connect-timeout=10000
#feign客户端建立连接后读取资源超时时间
feign.client.config.default.read-timeout=10000#开启Hystrix断路器
feign.hystrix.enabled=true
#配置Hystrix 超时时间 超时关闭
#hystrix.command.default.execution.timeout.enabled=false
#超时时间(默认1000ms)在调用方配置,被该调用方的所有方法的超时时间都是该值,优先级低于下边的指定配置
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=3000
#在调用方配置,被该调用方的指定方法(HystrixCommandKey方法名)的超时时间是该值
hystrix.command.HystrixCommandKey.execution.isolation.thread.timeoutInMilliseconds=4000
#线程池核心线程数 默认为10
hystrix.threadpool.default.coreSize=10
#最大排队长度。默认-1 如果要从-1换成其他值则需重启,即该值不能动态调整,若要动态调整,需要使用到下边这个配置
hystrix.threadpool.default.maxQueueSize=100
#排队线程数量阈值,默认为5,达到时拒绝,如果配置了该选项,队列的大小是该队列
hystrix.threadpool.default.queueSizeRejectionThreshold=5
# 简言之,10s内请求失败数量达到20个,断路器开。 当在配置时间窗口内达到此数量的失败后,进行短路。默认20个
hystrix.command.default.circuitBreaker.requestVolumeThreshold=20
#短路多久以后开始尝试是否恢复,默认5s
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=5
#出错百分比阈值,当达到此阈值后,开始短路。默认50%
hystrix.command.default.circuitBreaker.errorThresholdPercentage=50%
#调用线程允许请求HystrixCommand.GetFallback()的最大数量,默认10。超出时将会有异常抛出,注意:该项配置对于THREAD隔离模式也起作用
hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests=50000
3.定义Feign调用接口,和新建统一fallback处理类并实现Feign调用接口
@FeignClient(value = "member",fallback = MemberServiceFallback.class)
public interface MemberServiceFeign extends IMemberService {//此处为方便调用member服务的接口,采用直接继承member服务接口 不易写错且减少代码量//@FeignClient(value = "member",fallback = MemberServiceFallback.class)//value值为被调用服务名 fallback 值为 统一定义的fallback 类}
@Component
public class MemberServiceFallback implements MemberServiceFeign {@Overridepublic UserEntity getMember(String name) {return null;}//服务降级友好提示@Overridepublic ResultVO getUserinfo() {return new ResultVO(StatusCode.RESULT_SUCCESS,"服务器忙!请稍后重试!!!");}
}
4.启动类
@SpringBootApplication
@EnableEurekaClient //开启eureka客户端
@EnableFeignClients //开启feign调用
@EnableHystrix //开启hystrix
public class AppOrder {public static void main(String[] args) {SpringApplication.run(AppOrder.class, args);}
}
5.Feign调用服务降级测试接口(被调用member服务接口实现,睡眠5秒,配置超时3秒,故会超时)
@RestController
public class OrderServcieImpl implements IOrderService {@Autowiredprivate MemberServiceFeign memberServiceFeign;//hystrix第二种写法,使用类方式@RequestMapping("/orderToMemberUserInfoHystrixDemo02")public ResultVO orderToMemberUserInfoHystrixDemo02() {System.out.println("orderToMemberUserInfoHystrixDemo02: 线程池名称:"+Thread.currentThread().getName());return memberServiceFeign.getUserinfo();}
}
@Override
@RequestMapping("/getUserinfo")
public ResultVO getUserinfo() {try {Thread.sleep(5000);}catch (Exception e){e.printStackTrace();}return new ResultVO(StatusCode.RESULT_SUCCESS,"订单服务接口调用会员服务接口成功...."+serverPort);}
}
6.启动eureka member order 等服务,测试
2.@HystrixCommand注解方式
1.pom.xml文件 application.properties配置文件 启动类 同方法一 Feign调用服务接口 不要fallback
2.测试代码
//解决服务雪崩效应 hystrix有两种方式配置保护服务 通过注解和接口形式//fallbackMethod 方法的作用:服务降级执行//@HystrixCommand 默认开启了线程池隔离方式 ,服务降级,服务熔断@HystrixCommand(fallbackMethod = "orderToMemberUserInfoHystrixFallbackMethod")@RequestMapping("/orderToMemberUserInfoHystrix")public ResultVO orderToMemberUserInfoHystrix() {System.out.println("orderToMemberUserInfoHystrix: 线程池名称:"+Thread.currentThread().getName());return memberServiceFeign.getUserinfo();}//服务降级处理方法public ResultVO orderToMemberUserInfoHystrixFallbackMethod(){return new ResultVO(StatusCode.RESULT_SUCCESS,"返回友好提示:服务降级 !!! 服务器忙,请稍后重试!!!!");}
3.启动服务,调用接口测试
Hystrix服务降级的两种处理方式@HystrixCommand注解和定义统一fallback接口相关推荐
- nacos实现服务注册与两种消费方式
nacos实现服务注册与两种消费方式 运行nacos 服务注册实例 两种服务消费方式 RestTemplet Feign 测试 参考 运行nacos 预备环境:64位操作系统.64位JDK1.8+.M ...
- android启动服务的生命周期,Android Service的两种启动方式以及生命周期
Service的两种启动方式: 1.startService 2.bindService 注意: .在Android 5.0之后google出于安全的角度禁止了隐式声明Intent来启动Service ...
- Hystrix服务降级、熔断-微服务(十)
服务降级 降级配置 @HystrixCommand 8001先从自身找问题 设置自身调用超时时间的峰值,峰值内可以正常运行, 超过了需要有兜底的方法处理,作服务降级fallback 8001fallb ...
- 微服务(八)——Hystrix服务降级、熔断、限流(上)
目录 Hystrix服务降级.熔断.限流 Hystrix是什么 Hystrix停更进维 Hystrix的服务降级熔断限流相关概念 Hystrix支付微服务构建 JMeter高并发压测后卡顿 订单微服务 ...
- Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)【Dalston版】
前言 在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元应用间通过服务注册与订阅的方式互相依赖.由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服 ...
- Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)【Dalston版】 1
前言 在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元应用间通过服务注册与订阅的方式互相依赖.由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服 ...
- Hystrix 服务降级和熔断
Hystrix 服务降级和服务熔断 文章目录 Hystrix 服务降级和服务熔断 1.问题的提出 2.Hystrix 3.服务降级 3.1 服务降级实操 3.2 服务降级之客户端 3.3 总结 4.服 ...
- redis的两种持久化方式详解
一.背景 在实际开发中,为了保证数据的完整性,防止数据丢失,我们除了在原有的传统数据库保存数据的同时,最好是再用redis持久化再保存一次数据.如果仅仅是使用redis而不进行持久化配置的话,当red ...
- (转)javabean是什么和总结javabean的两种使用方式
一. javabean 是什么? Javabean 就是一个类,这个类就定义一系列 get<Name> 和 set<Name> 方法. So simple ! Javabean ...
最新文章
- 通过setTimeout处理click,dblclick,mousedown等事件的冲突
- android gradle is插件,android gradle 插件创建 configuration
- 四位先行进位电路逻辑表达式_数字电子技术考试卷以及答案(4套)
- jQuery插件AjaxFileUpload文件上传实现Javascript多文件上传功能
- 5G NR RLC:PDU Parameters
- 【MATLAB统计分析与应用100例】案例009:创建一个RandStream类对象,调用其randn方法生成标准正态分布随机数
- cad动态块制作翻转_定制橱柜家具中CAD门型动态块制作方式图文讲解加视频
- R语言学习笔记(一)R语言的基本操作与函数
- python print format_Python中的format格式化输出
- apply_async进程不执行_[粉丝问答6]子进程进程的父进程关系
- $smary模板缓存
- 编译DXperience 7.1源码和升级原有的应用程序
- 免费的音频视频压缩工具和方法
- R语言绘图:直方图——hist
- R语言使用ggplot2包使用geom_density()函数绘制分组密度图(填充色配置、半透明填充色、添加均值线)实战(density plot)
- 跑步机上的精彩人生——Linus大神传奇
- curly怎么读(curly怎么读音发音英语怎么说)
- Generalized Focal Loss
- java 面试题合集_撩课-Java面试题合辑1-50题
- speedoffice使用方法——Word如何设置段落背景颜色