为了避免服务单元出现故障导致的故障蔓延引起整个系统的瘫痪,需要在系统中加入容错保护机制。Hystrtix就是spring cloud下优秀的容错保护框架,下面记录一下引入过程
1 添加依赖
<!-- hystrix -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
2.在工程主类添加@EnableDiscoveryClient注解
package com.cfh.eurekaconsumer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
//获得服务发现能力
@EnableDiscoveryClient
//获取容错能力
@EnableCircuitBreaker
@SpringBootApplication
public class EurekaConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaConsumerApplication.class, args);
}
@Bean
@LoadBalanced//获得客户端的负载均衡能力
RestTemplate restTemplate(){
return new RestTemplate();
}
}
3.指定服务调用方法的回调
package com.cfh.eurekaconsumer.service;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class HelloService {
@Autowired
private RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "fallback")//使用HystrixCommand注解指定服务的回调方法
public String helloService(){
return restTemplate.getForObject("http://hello-service/hello",String.class);
}
public String fallback(){
return "error";
}
}