博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringCloud 之Hystrix断路器
阅读量:2455 次
发布时间:2019-05-10

本文共 2237 字,大约阅读时间需要 7 分钟。

文章目录

雪崩效应

在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因服务提供者的不可用导致服务消费者的不可用,并将不可用逐渐放大的过程。

如果下图所示:A作为服务提供者,B为A的服务消费者,C和D是B的服务消费者。A不可用引起了B的不可用,并将不可用像滚雪球一样放大到C和D时,雪崩效应就形成了。

在这里插入图片描述

Hystrix简介

官网地址:

官网宣布Hystrix已经停止更新并进入维护状态了,所以不建议使用了,替代方案:Spring Cloud Alibaba Sentinel
在这里插入图片描述
在这里插入图片描述
Netflix开源了Hystrix组件,实现了断路器模式,SpringCloud对这一组件进行了整合。 在微服务架构中,一个请求需要调用多个服务是非常常见的,如下图:
在这里插入图片描述
当对特定服务的呼叫达到一定阈值时(Hystrix中的默认值为5秒内的20次故障),电路打开,不进行通讯。并且是一个隔离的线程中进行的。
断路打开后,可用避免连锁故障,fallback方法可以直接返回一个固定值。
在这里插入图片描述

Hystrix设计原则

  • 防止单个服务的故障耗尽整个服务的 Servlet 容器(例如 Tomcat )的线程资源。
  • 快速失败机制,如果某个服务出现了故障,则调用该服务的请求快速失败,而不是线程等待。
  • 具有自我修复的能力,若服务正常了,熔断器关闭,服务故障,熔断器启动,避免服务正常后也无法正常调用服务。

Ribbon中使用断路器

改造eureka-ribbon-client工程的代码,首先在pox.xml文件中加入spring-cloud-starter-netflix-hystrix的起步依赖:

org.springframework.cloud
spring-cloud-starter-netflix-hystrix

在启动类中添加@EnableHystrix注解开启Hystrix。

使用@HystrixCommand注解创建熔断器的功能,并指定了fallbackMethod熔断方法。

package com.yq.ribbon.controller;import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;@RestControllerpublic class DemoController {
@Autowired RestTemplate restTemplate; @GetMapping("/ribbon") @HystrixCommand(fallbackMethod = "error") public String demo() {
return restTemplate.getForObject("http://eureka-client/hello", String.class); } // 服务降级方法要和原方法的参数列表一致 public String error() {
return "sorry,error!"; }}

启动测试,然后断掉将要将费的服务。

在这里插入图片描述
当服务不可用时,会执行熔断器指定的方法,而不是等待响应超时,这很好的控制了容器的线程阻塞。

Feign中使用断路器

由于 Feign 的起步依赖中已经 引入了 Hystrix 的依赖,所以在 Feign 中使用 Hystrix 不需要引入任何的依赖 。

Feign默认没有打开Hystrix功能,需要在配置文件中配置打开它。

#开启hystrix断路器feign:  hystrix:    enabled: true

创建服务降级类FeignClientCallback

import org.springframework.stereotype.Component;// 此类中的方法专门用于服务降级,该类一般要实现调用远程服务的接口(这样保证方法名一致)@Componentpublic class FeignClientCallback implements FeignClientInter {
// 服务降级的方法要和原方法一致(名称、参数列表) @Override public String sayHelloFromClient() {
return "服务降级方法返回"; }}

在Feign客户端中添加fallback属性指定服务降级的类就行了。

在这里插入图片描述
启动测试,然后断掉将要将费的服务。
在这里插入图片描述
说明断路器起作用了。

转载地址:http://sgdhb.baihongyu.com/

你可能感兴趣的文章
一个工作表可以有两个事件吗_你有两个工作
查看>>
Raul的新机器学习书!
查看>>
django 部署_狂野的Django:部署生存的技巧
查看>>
面向前端开发人员的Visual Studio Code概述
查看>>
2017年最喜欢的Visual Studio代码扩展
查看>>
gvim文本编辑器帮助_如何帮助您的文本编辑器帮助您
查看>>
函数setState是React的未来
查看>>
山东大学有人陪!真的吗?_10,000小时! 您真的需要那么多吗?
查看>>
macos 安装scala_如何在MacOS上安装Scala和Apache Spark
查看>>
ES6中修复的5个JavaScript“不良”部分
查看>>
实习一年算工作一年吗?_如何在不到一年的时间里获得开发人员的工作
查看>>
lynda ux_UX编排原理
查看>>
scrum master_从Scrum Master到工程副总裁:职称为何重要
查看>>
sdlc 瀑布式 生命周期_SDLC指南–软件开发生命周期的阶段和方法
查看>>
大omega记号_什么是大欧米茄符号?
查看>>
react 使用 mobx_如何使用React和MobX状态树构建基于状态的路由器
查看>>
移动认证_如何在移动设备上实施安全的生物特征认证
查看>>
敏捷开发创始人_开发人员和技术创始人如何将他们的想法转化为UI设计
查看>>
node aws 内存溢出_在AWS Elastic Beanstalk上运行生产Node应用程序的现实
查看>>
我如何在昌迪加尔大学中心组织Google Hash Code 2019
查看>>