springCloud熔断器
Posted 金币
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springCloud熔断器相关的知识,希望对你有一定的参考价值。
spring cloud 熔断器
熔断器 也叫断路器 什么是断路器 它就相当于项目中的保险丝
当你的微服务拆分越细 模块越多 他们直接的调用就会越来越复杂
那可以想一下 如果中间有一个模块 等了五秒钟才能运行成功
那么调用方以及调用方的对外服务都需要等五秒 但请求还在不停地进入 这就形成了一个雪崩效应
请求堆积越来越多 就会使整个分布式架构的崩溃 那么熔断器就可以解决我们的问题
它可以在依赖方调用缓慢或崩溃的情况下进入自己的回路方法
熔断器的使用
1.加入jar包
// https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-hystrix
compile group: ‘org.springframework.cloud‘, name: ‘spring-cloud-starter-hystrix‘
2.在调用方的调用方法上写代码 以下是例子
@Controller
public class PageController {
public static Logger logger =LoggerFactory.getLogger(PageController.class);
@Autowired
private RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "backMethod")
@RequestMapping(value = "index")
public String toIndex(Model model){
System.out.println("进入index");
logger.info("执行了查询 开始调用PROJECT-POPPY-SOLR的服务");
String msg=restTemplate.getForEntity("http://user:user password:[email protected]/search",String.class).getBody();
logger.info("调用微服务结束");
model.addAttribute("msg",msg);
return "index";
}
public String backMethod(Model model){
System.out.println("进入回路方法");
model.addAttribute("msg","服务不可用 请稍后重试");
return "index";
}
}
在调用方的调用方法上加上@HystrixCommand(fallbackMethod="回路方法")
注意 这里回路方法的返回值以及参数必须与原方法对应 否则系统就不认为你是回路方法
在回路方法中编写自己的代码 如果方法崩溃或调用过慢 就会进入指定的回路方法 下面会演示
3.配置
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 7000 #请求响应时间 如果过了这个时间就会进入回路方法
circuitBreaker:
requestVolumeThreshold: 2 # 服务降级:此请求连续多少次响应过慢或崩溃 系统就默认把它当成一个崩溃的方法 在一定时间内调用此方法会直接进入回路方法 这样执行更快
默认值是20 请求该方法20次 如果崩溃或响应过慢率大于百分之八十 就会默认它是一个崩溃方法
#timeout:
#enabled: false #取消超时检查 无论线程运行多久 只要不崩溃就不进入回路方法 一般情况不使用
4启动类上加上
@EnableCircuitBreaker
我这边故意在被调用方的方法上加上线程休眠 看一下运行结果
看到了这里显示不可用 说明进入了回路方法 看一下控制台
看到了先进入了index方法 然后被调用方加载过慢 过了我们配置的七秒所以这里就进入了回路方法
我们来试试多次连续运行
看到了只进入了两次我们的index 然后就不进入了 运行直接进入回路方法
以上就是spring cloud 熔断器
以上是关于springCloud熔断器的主要内容,如果未能解决你的问题,请参考以下文章