1.3.2.3.编写降级逻辑
我们改造itcast-service-consumer,当目标服务的调用出现故障,我们希望快速失败,给用户一个友好
提示。因此需要提前编写好失败时的降级处理逻辑,要使用HystixCommond来完成:
要注意,因为熔断的降级逻辑方法必须跟正常逻辑方法保证:相同的参数列表和返回值声明。失败逻辑
中返回User对象没有太大意义,一般会返回友好提示。所以我们把queryById的方法改造为返回
String,反正也是Json数据。这样失败逻辑中返回一个错误说明,会比较方便。
说明:
@HystrixCommand(fallbackMethod = "queryByIdFallBack"):用来声明一个降级逻辑的方法
测试:
当itcast-service-provder正常提供服务时,访问与以前一致。但是当我们将itcast-service-provider停机
时,会发现页面返回了降级处理信息:
@SpringCloudApplication
public class ItcastServiceConsumerApplication {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(ItcastServiceConsumerApplication.class, args);
}
}
@Controller
@RequestMapping("consumer/user")
public class UserController {
@Autowired
private RestTemplate restTemplate;
@GetMapping
@ResponseBody
@HystrixCommand(fallbackMethod = "queryUserByIdFallBack")
public String queryUserById(@RequestParam("id") Long id) {
String user = this.restTemplate.getForObject("http://service-
provider/user/" + id, String.class);
return user;
}
public String queryUserByIdFallBack(Long id){
return "请求繁忙,请稍后再试!";
}
}