1、添加maven依赖
<dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystrix-core</artifactId> <version>1.5.18</version> </dependency> <dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystrix-javanica</artifactId> <version>1.5.18</version> </dependency>
2、配置切面
<aop:aspectj-autoproxy proxy-target-class="true" /> <bean class="com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect" />
3、编写controller类,并添加注解
@Controller @RequestMapping public class CommonController { /** * 主页 * * @return */ @RequestMapping("/") public String home() { return "home.html"; } /** * 配置2秒超时,超时后调用testFallback方法返回到error界面<br> * 当并发量比较大时,并非所有阻断或失败的请求都会走fallback方法,当处理线程忙不过来时,会直接抛出HystrixRuntimeException异常 * * @param mav * @param time 睡眠时间 * @return */ @HystrixCommand(groupKey = "groupTest", commandKey = "commandTest", fallbackMethod = "testFallback", commandProperties = { @HystrixProperty(name = "execution.timeout.enabled", value = "true"), @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "2000") }) @RequestMapping("/test") public ModelAndView test(ModelAndView mav, @RequestParam(defaultValue = "1") int time) { try { Thread.sleep(1000 * time); } catch (Exception e) { } mav.setViewName("success.html"); return mav; } /** * test访问熔断后回调页面 * * @param mav * @param time * @return */ protected ModelAndView testFallback(ModelAndView mav, @RequestParam(defaultValue = "1") int time) { mav.setViewName("fallback.html"); return mav; } }
4、在webapp目录下添加fallback.html、success.html文件
5、访问http://127.0.0.1:8080/spring-hystrix-demo/test?time=0,浏览器正常进入success.html页面;
访问http://127.0.0.1:8080/spring-hystrix-demo/test?time=5,连接超时,后台执行testFallback方法,浏览器进入fallback.html页面。