Spring Cloud Hystrix:未调用FallbackMethod

时间:2018-02-07 16:27:49

标签: java spring spring-cloud hystrix

我正在玩Spring Cloud Hystrix而且我得到了一个奇怪的错误,我的Fallback方法没有被调用。我的控制器在下面。

@Controller
public class DashboardController {

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder){
        return builder.build();
    }

    @Autowired
    private RestTemplate restTemplate;

    @HystrixCommand(fallbackMethod = "getFareBackup")
    @RequestMapping("/dashboard")
    public String getFareDashboard(Model m) {
        try {
            ResponseEntity<List<BusFare>> responseEntity = restTemplate.exchange("http://busfare-service/api/v1/fare/",
                    HttpMethod.GET, null, new ParameterizedTypeReference<List<BusFare>>() {
                    });
            m.addAttribute("fareList", responseEntity.getBody());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "dashboard";
    }


    public String getFareBackup(Model m){
        System.out.println("Fallback operation called");

        m.addAttribute("fareList", new ArrayList<BusFare>().add(new BusFare(1, BigDecimal.valueOf(0.7), "Regular")));
        return "dashboard";
    }

}

正如您所看到的,我正确设置了fallbackMethod,但是,当我运行服务器并将浏览器指向终点时,我得到一个例外,说我的服务器已关闭,据我所知,当我的服务停机时应该调用fallbackMethod,但在我的情况下并非如此,我的fallbackMethod基本上没有被调用。

  

java.lang.IllegalStateException:没有可用于busfare-service的实例

我在代码中遗漏了什么?

1 个答案:

答案 0 :(得分:0)

看来我喜欢,Hystrix通过errorHandling处理这个fallbackMethod。什么搞砸我的代码导致我的回调没有被调用是errorHandling。

@HystrixCommand(fallbackMethod = "getFareBackup")
@RequestMapping("/dashboard")
public String getFareDashboard(Model m) {

    ResponseEntity<List<BusFare>> responseEntity = restTemplate.exchange("http://busfare-service/api/v1/fare/",
                HttpMethod.GET, null, new ParameterizedTypeReference<List<BusFare>>() {
                });

    m.addAttribute("fareList", responseEntity.getBody());

    return "dashboard";
}

使用上面的代码,fallbackMethod正在运行。