消费者服务--service 的实现如下:
@Service public class BookService { @Autowired public RestTemplate restTemplate; @HystrixCommand(fallbackMethod = "addServiceFallback") public Book getBook( Integer bookId ){ return restTemplate.getForObject("http://provider-service/boot/book?bookId={bookId}",Book.class , bookId); } public String addServiceFallback(){ System.out.println("error addServiceFallback.... "); return "error" ; } }
就会出现如下所述的异常
This application has no explicit mapping for /error, so you are seeing this as a fallback.
fallback method wasn't found: addServiceFallback([class java.lang.Integer])
这是因为指定的 备用方法 addServiceFallback 和 原方法getBook 的参数个数,参数类型 不同造成的;
修改addServiceFallback 方法:
public String addServiceFallback(Integer bookId){ System.out.println("error addServiceFallback.... "); return "error" ; }继续运行,就会出现如下所述的异常
This application has no explicit mapping for /error, so you are seeing this as a fallback.
这是因为指定的 备用方法 addServiceFallback 和 原方法getBook 虽然 参数个数,参数类型 相同 ,但是 方法的返回值类型不同造成的;
修改addServiceFallback 方法:
public Book addServiceFallback(Integer bookId){ System.out.println("error addServiceFallback.... "); return new Book() ; }
继续运行,这样就可以看到当一个服务提供者异常关闭时, 消费者(消费者采用轮询的方式消费服务)再继续访问服务时,不会抛出异常页面,而是如下:
{"bookId":0,"bookName":null,"price":null,"publisher":null}