Spring Cloud 应用篇 之 Hystrix 的基本使用

在微服务架构中,我们会将系统根据业务垂直拆分为很多服务,各个服务之间通过注册与订阅的方式相互依赖。但是由于网络出现不稳定或自身服务出现异常,导致调用故障或延迟,此时若并发量很大,可能会导致服务崩溃。断路器 Hystrix 就是解决此问题的。

(一)简介

Spring Cloud Hystrix 是基于 Netflix 的开源框架 Hystrix 实现的,它具有断路器、线路隔离等一系列服务保护功能。Hystrix 具备服务降级、服务熔断、请求缓存、请求合并以及服务监控等强大功能。

(二)基于 Ribbon 使用 Hystrix

1. 仍然是基于上一篇的工程,启动 eureka-service,spring-demo-service 
2. 修改 spring-demo-service-ribbon 的 pom 文件,添加 Hystrix 的依赖:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

修改启动类,添加 @EnableHystrix 注解开启 Hystrix 功能

@SpringBootApplication
@EnableEurekaClient
@EnableHystrix
public class ServiceRibbonApplication {

	public static void main(String[] args) {
        SpringApplication.run(ServiceRibbonApplication.class, args);
	}

	@Bean
	@LoadBalanced
	RestTemplate restTemplate() {
		return new RestTemplate();
	}

	@Bean
	public IRule ribbonRule() {
		return new RandomRule();	//这里配置策略,和配置文件对应
	}
}

修改 SpringDemoRibbonService

@Service
public class SpringDemoRibbonService {

    @Autowired
    RestTemplate restTemplate;

    @Autowired
    LoadBalancerClient loadBalancerClient;

    @HystrixCommand(fallbackMethod = "portFallback")
    public String port() {
        this.loadBalancerClient.choose("spring-demo-service");  //随机访问策略
        return restTemplate.getForObject("http://SPRING-DEMO-SERVICE/port", String.class);
    }

    public String portFallback() {
        return "sorry ribbon, it's error!";
    }
}

在 port 方法上加上 @HystrixCommand 注解,对此方法开启熔断器功能,用 fallbackMethod 属性指定熔断回调方法。

启动 spring-demo-service-ribbon,访问 localhost:8381/hello,浏览器会正常显示:


关闭 spring-demo-service,再次访问 localhost:8381/hello,浏览器显示:


即是熔断方法 portFallback 输出的一串字符。说明 spring-demo-service 出现异常或不可用时,spring-demo-service-ribbon 调用其接口失败,会直接调用熔断方法返回,而不会等待超时响应。

(三)基于 Feign 使用 Hystrix

Feign 自带熔断器功能,但是在 Dalston 版本之后,其默认是关闭的,需要手动打开。

1. 修改 spring-demo-service-feign 的 pom 文件,添加依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2. 修改配置文件,添加下面的配置,打开 Feign 的熔断功能
feign:
  hystrix:
    enabled: true
3. 修改 SpringDemoFeignService 接口,在 @FeignClient 注解中加入 fallback 即可。
@FeignClient(value = "spring-demo-service", fallback = ErrorHystrix.class)
public interface SpringDemoFeignService {

    @RequestMapping(value = "port", method = RequestMethod.GET)
    String hello();
}
4. 创建上一步指定的 ErrorHystrix 类,实现 SpringDemoFeignService 接口,注入容器中
@Component
public class ErrorHystrix implements SpringDemoFeignService {

    @Override
    public String hello() {
        return "sorry, it's error!";
    }
}
5. 启动 spring-demo-service-feign

浏览器访问 localhost:8382/hello,当 spring-demo-service 正常启动的时候,浏览器访问即正常显示调用,当 spring-demo-service 关闭或者出现异常的时候,浏览器会显示 fallback 指定类里的方法的返回值。截图这里就不贴了。

源码下载:https://github.com/shmilyah/spring-cloud-componets

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值