SpringCloud分布式(二) 熔断器Hystrix使用详解

什么是熔断器?

熔断器相当于电路当中的保险丝一样,如果在一段时间内发生多次失败,则会直接导致后续调用全部失败。如果已修正,则应用程序会再次发起调用操作。

如何使用?

  1. 在创建新的springboot项目中勾选【Hystrix】或者pom里增加
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
  1. 在XXXApllication文件中增加@EnableCircuitBreaker 注解
  2. 改造之前的服务消费者,将RestTemplate封装为service
  3. 在service 中使用HystrixCommand注解需要降级的方法。
@Service
public class RestService {
	@Autowired
	RestTemplate restTemplate;
	
	@HystrixCommand(fallbackMethod="indexfallback")
	public String index(int i,int j)
	{
		return restTemplate.getForEntity("http://restservice1/xyf/hello",String.class).getBody();
	}	

	public String indexfallback(int i,int j)
	{
		return "降级调用";
	}
}

关键点:
@HystrixCommand(fallbackMethod=“indexfallback”)的意思是:当调用服务失败的时候,调用indexfallback方法,fallbackMethod参数返回值要和原方法一样。这种A方法调用失败(比如请求出错、服务器无法连接等),转而调用B方法的做法叫“服务降级”,也可以在indexfallback中继续标注@HystrixCommand,这样如果indexfallback失败那么会继续降级

异常处理

HystrixCommand方法中如果出现了任何异常,那么会导致降级,前文已经提到,那么如果说想要某些异常不导致服务降级,那么可以使用HystrixCommand的ignoreExceptions指定多个异常。可以给接受降级的方法增加一个Throwable类型的参数,这样当发生服务降级的时候,就可以得到异常信息。ignoreExceptions表示忽视异常。

例如:

@HystrixCommand(fallbackMethod="indexfallback",ignoreExceptions= {IllegalArgumentException.class)
@Service
public class RestService {
	@Autowired
	RestTemplate restTemplate;
	
	@HystrixCommand(fallbackMethod="indexfallback",ignoreExceptions= {IllegalArgumentException.class})
	public String index()
	{
		int i = 3;
		if(i>0)
		{
			throw new NullPointerException("i3错误");
		}
		if(i==3)
		{
			throw new IllegalArgumentException("i错误");
		}
		return restTemplate.getForEntity("http://restservice1/xyf/hello",String.class).getBody();
	}	

	public String indexfallback(Throwable t)
	{
		return "降级调用"+t;
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章