Hystrix
Posted Java Miraculous
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hystrix相关的知识,希望对你有一定的参考价值。
现在的电商网站基本都是微服务,会员、订单、商品(库存)、购物车,这些模块都是独立的应用,模块之间通过RPC进行调用(我上家公司用的springmvc或者springboot,RPC框架是dubbo,现在的公司就是springcloud,可见springcloud是个趋势),正常情况下,一个用户登录,登录完选商品,选完商品提交订单,提交订单的时候需要减库存,假如现在库存接口响应缓慢,那么从订单系统过来的请求就会等待,平时QPS小的时候倒是没啥大的问题,最多就是响应慢点,但假如是大促期间出现这问题,短时间内超高的请求会造成线程池很快打满,商品系统瘫痪,订单系统由于等待商品系统的响应也最终瘫痪,所以一个系统出问题不可怕,可怕的是引起别的系统也出问题。
一、通过一个简单的例子学习下springcloud Hystrix
1.1、启动eureka-server
1.2、启动provider
1.3、启动consumer
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
package com.example.consumer.service;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class HelloService {
@Autowired
private RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "helloFallBack")
public String helloService(){
ResponseEntity<String> responseEntity =
restTemplate.getForEntity("http://PROVIDER/hello?name={1}", String.class, "猪小屁");
String body = responseEntity.getBody();
return body;
}
public String helloFallBack(){
return "小屁繁忙,请稍后重试";
}
}
你会发现Hystrix起作用了,除了服务挂掉这种情况外,我们还可以模拟下服务阻塞(就是长时间无响应)
修改provider里的接口里修改:
以上是关于Hystrix的主要内容,如果未能解决你的问题,请参考以下文章