网站首页 > 精选教程 正文
技术/杨33
Hystrix是一个用于处理分布式系统的延迟和容错的开源库。在分布式系统里,由于网络原因或者自身原因,服务并不能保证100%可用,假如某个服务出现问题,这个服务再次被请求就会出现线程阻塞,请求的数量越来越多,把线程池资源消耗完毕,服务就会出现瘫痪,由于微服务的服务与服务之间存在依赖性,所以故障会传播,最终整个微服务体系瘫痪,这就是“雪崩”效应。
Hystrix能够保证某个服务出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。
某个服务发生故障时,通过Hystrix的故障监控,向调用方返回一个符合预期的、可处理的备选响应,而不是长时间的等待或者抛出调用方无法处理的异常。这样就保证了服务调用方的线程不会被长时间、不必要的占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。
一、服务降级、服务熔断、服务限流
- 服务降级
服务不可用、代码异常、接口等待时间长的时候,不让客户端等待,立刻返回一个友好的提示。
- 服务熔断
达到服务的最大访问能力后,直接拒绝再次被访问,然后调用服务降级的方法返回友好提示。
- 服务限流
秒杀高并发等操作,限制一定时间内可以访问多少服务,有序进行。
二、Java中如何使用Hystrix
Hystrix都是在服务消费者的模块进行断路器的相关配置。
1、pom.xml文件依赖包引入
<!-- hystrix -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2、主启动类必须添加注解@EnableCircuitBreaker,激活服务降级。
3、fallbackMethod参数指定系统出现问题,服务降级调用的方法名,@HystrixProperty注解可以约定该方法被调用的时间限制,比如超过3秒,就使用服务降级,调用友好提示的方法。
/**
* 系统正常提供的方法
* @return
*/
@HystrixCommand(fallbackMethod = "handler", commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "3000")
})
public String test() {
return "系统目前正常";
}
/**
* test()方法出现问题后被调用
* @return
*/
public String handler() {
return "系统繁忙,请稍后再试!";
}
还可以这是全局的服务降级注解@DefaultProperties(defaultFallback = "handler"),对所有方法提供统一的服务异常处理提示。
作者:杨33,北京互联网公司在职Java开发,专注分享写作干货。欢迎关注我,期待你的点赞评论。
猜你喜欢
- 2024-11-17 SpringCloudAlibabaSentinel熔断限流
- 2024-11-17 2022届秋招Java岗高频面试题盘点,老司机也未必全会,真的太卷了
- 2024-11-17 2022春招,Java面试项目推荐,15个项目吃透两个offer拿到手软
- 2024-11-17 微服务网关如何防止雪崩?阿里开源项目之Sentinel限流、熔断
- 2024-11-17 SpringCloud之Hystrix服务降级
- 2024-11-17 分布式服务限流降级熔断解决方案Nacos之Dashboard界面配置含义
- 2024-11-17 2022年腾讯首发Java岗分布式面试真题,助力金三银四我是认真的
- 2024-11-17 一个可供参考的Java高并发异步应用案例--转
- 2024-11-17 面试官:聊聊服务熔断降级Sentinel
- 2024-11-17 2019年高级Java程序员面试题汇总,含个人答案总结
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)