一、什么叫熔断
在微服务环境中,设想以下场景:某一个业务中需要调用S服务,而S服务需要调用A服务,以此类推,依次调用B服务和C服务。当系统环境产生异常,C服务无法正常运行导致宕机。进而会影响到调动链之上的服务执行。这样会造成服务链上的服务发生雪崩性的错误,进而导致整个系统不能使用。为了避免这样的情况发生,当某一个服务发生了异常状态后,架构内应该能够及时自动的终止服务调动,而当服务恢复后,再恢复对服务的访问。这样的容错机制就称为熔断。需要注意的是,熔断机制并是要保障一个报错的接口能够正常执行,而是要让有可能报错的接口,快速返回可预期的失败场景,并快速释放资源,避免调用链上的服务全面崩溃。


二、熔断器的运行机制

断路器很好理解, 当Hystrix Command请求后端服务失败数量超过一定比例(默认50%), 断路器会切换到开路状态(Open). 这时所有请求会直接失败而不会发送到后端服务. 断路器保持在开路状态一段时间后(默认5秒), 自动切换到半开路状态(HALF-OPEN). 这时会判断下一次请求的返回情况, 如果请求成功, 断路器切回闭路状态(CLOSED), 否则重新切换到开路状态(OPEN).
三、如何创建熔断工程(使用restTemplate)
- 首先在中台(s工程,只负责调用其他服务,不进行其他操作)引入熔断机制:
<!-- 熔断机制 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
- 在yml中引入:
hystrix:
command:
cslcp:
execution:
timeout:
enabled: true
isolation:
thread:
timeoutInMilliseconds: 1000
default:
execution:
timeout:
#开启熔断超时
enabled: true
isolation:
thread:
#熔断超时的秒数,方法调用总时长,熔断超时要比resttemplate超时大。低于r几倍,比如r重试三次每个100秒,
#则熔断需要设置小于300秒
timeoutInMilliseconds: 5000
- 中台(s工程)yml全如下图:
熔断的超时时间配置:
hystrix:
command:
default:
execution:
timeout:

本文详细介绍了微服务中熔断的概念和作用,通过实例展示了如何使用Hystrix实现熔断,包括配置熔断超时、创建熔断工程、调用重试以及断路器的开闭控制。同时,文章还提及了幂等性在系统设计中的重要性。
最低0.47元/天 解锁文章
2266

被折叠的 条评论
为什么被折叠?



