资讯详情

详解spring cloud分布式关于熔断器

spring cloud熔断器是分布式的断路器,其实都是一个意思。

为何使用熔断器?

在分布式中,我们将根据业务或功能将项目分为多个服务单元,通过服务注册和订阅相互依赖和呼叫功能,随着项目和业务的不断扩大,服务单元数量逐渐增加,相互依赖越来越复杂,此时,可能是服务单元问题或网络原因依赖呼叫错误或延迟,如果呼叫依赖要求增加,如果后续的连反应越来越多,需要调用服务的服务将会等待或出现故障,Servlet消耗了容器的线程资源,导致服务瘫痪。对服务的依赖会导致服务之间的故障传播,从而迎来雪崩效应。服务与服务的依赖会导致服务之间的故障传播,导致雪崩效应。为了解决每个点或多个点的故障,保险丝出现了。

熔断器是什么?

熔断器相当于电路中的保险丝和保护器。它可以实现快速失败。如果它在一定时间内发现许多类似的错误,它将不再访问远程服务器,将迫使未来的访问快速失败,以防止服务继续尝试执行可能失败的操作。它将使服务继续执行,而无需等待纠正错误或浪费CPU长时间等待加班,从而进入回路方法。熔断器还可以使服务能够诊断错误是否已经修正,如果已经修正,服务将再次尝试调用。

e54d25b374ef8df99b35313f70aec6a1.png

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中:

@Controller

//@EnableWebSecurity 安全检查controller还要继承extends WebSecurityConfigurerAdapter

public class PageController {

public static Logger logger=LoggerFactory.getLogger(PageController.class);

@Autowired

private RestTemplate restTemplate;

@HystrixCommand(fallbackMethod = "toIndex1")///断路器进入回路的方法

@RequestMapping("/toIndex1")

public String toIndex(Model model){

System.out.println("进入toIndex");

logger.info("执行调用");

String msg=restTemplate.getForEntity("http://project-solr/SolrSearch",String.class).getBody();//project-solr在注册中心调用名称

logger.info("调用结束");

model.addAttribute("msg",msg);

return "index";

}

public String toIndex1(Model model){

System.out.println("进入回路法");

model.addAttribute("msg","服务不可用,请稍后重试");

return "index";

}

}

注:服务于调用方Controller添加方法@HystrixCommand(fallbackMethod = "回路方法")

在这里,我让回路方法调用toIndex1.注意回路方法的返回值,参数应与原方法一致

故障发生在被调用方法中:

3.注意调用方的启动类@EnableCircuitBreaker启动熔断器

启动:

可以看到进入回路的方法

当然,调用方也可以配置:

hystrix:

command:

default:

execution:

isolation:

thread:

timeoutInMilliseconds: 2000 #请求响应时间 如果过了这段时间,就会进入回路方法

circuitBreaker:

requestVolumeThreshold: 2 # 服务降级:这个请求反应过慢或崩溃多少次 系统默认将其视为崩溃的方法 在一定时间内调用此方法将直接进入回路 这样执行得更快 默认值是20 请求这种方法20次 如果崩溃或反应过慢,超过80% 默认是一种崩溃方法

#timeout:

#enabled: false #取消超时检查 不管线程运行多久 只要不崩溃,就不会进入回路 一般不使用

配置后操作:

操作几次后,发现前两次会访问并等待相应的结果,然后直接回应结果进入回路方法

当然,这是基于配置:

spring cloud熔断器到此为止,想知道spring cloud其他内容,请浏览我以前的博客

以上是本文的全部内容,希望对大家的学习有所帮助,也希望大家多支持脚本之家。

标签: 久茂熔体变送器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台