- 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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!