- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章SpringCloud微服务之Hystrix组件实现服务熔断的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
微服务架构特点就是多服务,多数据源,支撑系统应用。这样导致微服务之间存在依赖关系。如果其中一个服务故障,可能导致系统宕机,这就是所谓的雪崩效应.
1、服务熔断 。
微服务架构中某个微服务发生故障时,要快速切断服务,提示用户,后续请求,不调用该服务,直接返回,释放资源,这就是服务熔断.
熔断生效后,会在指定的时间后调用请求来测试依赖是否恢复,依赖的应用恢复后关闭熔断.
2、服务降级 。
服务器高并发下,压力剧增的时候,根据当业务情况以及流量,对一些服务和页面有策略的降级(可以理解为关闭不必要的服务),以此缓解服务器资源的压力以保障核心任务的正常运行.
双十一期间,支付宝很多功能都会提示,[双十一期间,保障核心交易,某某服务数据延迟].
3、核心依赖 。
1
2
3
4
|
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
|
4、核心注解 。
•@EnableHystrix 启动类注解控制熔断功能。 •@HystrixCommand 方法注解,熔断控制配置.
5、案例模块描述 。
演示基于Ribbon服务的熔断 node03-consume-8001 演示基于Feign服务的熔断 node03-consume-8002 Eureka注册中心 node03-eureka-7001 两个服务提供方 node03-provider-6001 node03-provider-6002 。
1、熔断执行方法 。
1
2
3
4
5
6
|
/**
* 服务熔断调用方法
*/
public
String getDefaultInfo (){
return
"服务被熔断"
;
}
|
2、简单案例 。
1
2
3
4
5
6
7
8
|
/**
* 简单配置
*/
@RequestMapping
(
"/showInfo1"
)
@HystrixCommand
(fallbackMethod =
"getDefaultInfo"
)
public
String showInfo1 (){
return
restTemplate.getForObject(server_name+
"/getInfo"
,String.
class
) ;
}
|
Hystrix默认的超时时间是1秒,超时时间内部响应,就会执行熔断,进入fallback程序。由于Spring的懒加载机制,首次请求往往比较慢,可以通过配置Hystrix超时时间解决.
3、复杂案例 。
•配置超时、并发、线程池、指定异常熔断忽略 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
/**
* 复杂配置
*/
@RequestMapping
(
"/showInfo2"
)
@HystrixCommand
(
fallbackMethod =
"getDefaultInfo"
,
commandProperties={
// 降级处理超时时间设置
@HystrixProperty
(name =
"execution.isolation.thread.timeoutInMilliseconds"
, value =
"3000"
),
// 任意时间点允许的最高并发数。超过该设置值后,拒绝执行请求。
@HystrixProperty
(name =
"fallback.isolation.semaphore.maxConcurrentRequests"
, value =
"1000"
),
},
// 配置执行的线城池
threadPoolProperties = {
@HystrixProperty
(name =
"coreSize"
, value =
"20"
),
@HystrixProperty
(name =
"maxQueueSize"
, value =
"-1"
),
},
// 该异常不执行熔断,去执行该异常抛出的自己逻辑
ignoreExceptions = {ServiceException.
class
}
)
public
String showInfo2 (){
String value =
""
;
// 测试配置异常不熔断
// 响应:{"code":500,"msg":"运行异常"}
if
(value.equals(
""
)){
throw
new
ServiceException(
"运行异常"
) ;
}
// 该异常被熔断
// if (value.equals("")){
// throw new RuntimeException("抛出错误") ;
// }
return
restTemplate.getForObject(server_name+
"/getInfo"
,String.
class
) ;
}
|
4、启动类注解 。
•@EnableHystrix 。
1、Jar包说明 。
通过观察Fegin依赖的JAR可知,Fegin的Jar下包含Hystrix需要的Jar包,这里不用再次导入依赖.
2、熔断配置 。
Feign用接口实现的声明式Rest请求,所以配置也就在接口上面了.
1)、接口代码 。
1
2
3
4
5
|
@FeignClient
(value =
"NODE02-PROVIDER"
,fallback = FallbackService.
class
)
public
interface
GetAuthorService {
@RequestMapping
(value =
"/getAuthorInfo/{authorId}"
,method = RequestMethod.GET)
String getAuthorInfo (
@PathVariable
(
"authorId"
) String authorId) ;
}
|
2)、熔断执行代码 。
1
2
3
4
5
6
7
|
@Component
public
class
FallbackService
implements
GetAuthorService {
@Override
public
String getAuthorInfo(String authorId) {
return
"服务被熔断"
+authorId;
}
}
|
3)、配置文件 。
•开启熔断功能 。
1
2
3
|
feign:
hystrix:
enabled:
true
|
3、服务类注解 。
由于上面的接口和熔断代码是在不同的Jar模块中,所以要在启动类@SpringBootApplication注解中扫描,如下.
1
2
3
4
5
6
7
8
9
10
|
@SpringBootApplication
(scanBasePackages = {
"cloud.node02.consume"
,
"cloud.block.code.service"
})
@EnableEurekaClient
// 本服务启动后会自动注册进eureka服务中
@EnableDiscoveryClient
// 因为包名路径不同,需要加basePackages属性
@EnableFeignClients
(basePackages={
"cloud.block.code.service"
})
public
class
Application_8002 {
public
static
void
main(String[] args) {
SpringApplication.run(Application_8002.
class
,args) ;
}
}
|
GitHub地址:知了一笑 https://github.com/cicadasmile/spring-cloud-base 码云地址:知了一笑 https://gitee.com/cicadasmile/spring-cloud-base 。
总结 。
以上所述是小编给大家介绍的SpringCloud微服务之Hystrix组件实现服务熔断的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢! 。
原文链接:https://www.cnblogs.com/cicada-smile/archive/2019/08/02/11286451.html 。
最后此篇关于SpringCloud微服务之Hystrix组件实现服务熔断的方法的文章就讲到这里了,如果你想了解更多关于SpringCloud微服务之Hystrix组件实现服务熔断的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
高可用的三大利器是熔断、限流和降级。它们都是在分布式系统中用于保障系统稳定性和可用性的重要策略。 熔断(Circuit Breaker):熔断是一种防止故障扩散的机制。当一个服务出现故障或超时
近年来,各大厂Google、微软、阿里、腾讯等都在提高可用的概念。高可用(High Availability,简称HA)是指系统或服务在遭受故障或异常情况时仍能持续提供稳定和可靠的运行能力。
我是一名优秀的程序员,十分优秀!