@HystrixCommand public Book test2() { return restTemplate.getForObject("http://HELLO-SERVICE/getbook1", Book.class); }
那么这种请求是一种同步请求的方式,如果我们想要使用注解来实现异步请求怎么办呢?很简单,两个步骤:
1.配置HystrixCommandAspect的Bean
在项目的入口类中配置一个HystrixCommandAspect的Bean,如下:
1 2 3 4
@Bean public HystrixCommandAspect hystrixCommandAspect() { return new HystrixCommandAspect(); }
2.通过AsyncResult来执行调用
还是使用@HystrixCommand注解,但是方法的实现使用AsyncResult,如下:
1 2 3 4 5 6 7 8 9
@HystrixCommand public Future<Book> test3() { return new AsyncResult<Book>() { @Override public Book invoke() { return restTemplate.getForObject("http://HELLO-SERVICE/getbook1", Book.class); } }; }
OK,如此之后我们就可以通过注解来实现异步调用了。调用方式如下:
1 2 3 4 5 6
@RequestMapping("/test3") public Book test3() throws ExecutionException, InterruptedException { Future<Book> bookFuture = bookService.test3(); //调用get方法时也可以设置超时时长 return bookFuture.get(); }