我正在尝试使用hystrix后备方法。 在localhost:8082上,正在运行客户服务,它返回客户的名称。
如果客户服务已关闭,则应调用回退方法。但它没有发生。
以下是代码段。
请建议。
@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
@RestController
public class DemoHystrixApplication {
@GetMapping("/")
public String name() {
String str = getCustomerName();
return str;
}
@HystrixCommand(fallbackMethod = "getFallbackCustomerName")
private String getCustomerName() {
RestTemplate restTemplate = new RestTemplate();
URI uri = URI.create("http://localhost:8082");
return restTemplate.getForObject(uri, String.class);
}
private String getFallbackCustomerName() {
System.out.println("coming inside fallback method");
return "Resillient Customer";
}
public static void main(String[] args) {
SpringApplication.run(DemoHystrixApplication.class, args);
}
}
答案 0 :(得分:3)
两种方法(即实际和回退方法)都应该是公共的,并将这些方法移动到一个单独的类中,并使用@Component进行注释。
尝试一下,希望这有帮助。
答案 1 :(得分:1)
您的@HystrixCommand带注释的方法应该是公开的。 不确定回退方法,但我也会公开它。
答案 2 :(得分:0)
这是因为AOP。
Spring容器在注入bean时会注入方面可识别的bean。
应用户请求调用name()
函数时,将调用方面感知Bean的方法,以便注释可用。
但是,在原始豆中将其封装在代理中之前,直接在this.getCustomerName()
中调用name()
会在原始bean上调用getCustomerName()
。它不知道方面。因此,注释不起作用。
我对我的英语不好表示歉意。
答案 3 :(得分:0)
如果您添加了netflix-hystrix的依赖项并具有开发工具来在执行服务时获取更改,那么您也可以尝试停止和启动该服务。
答案 4 :(得分:0)
后备方法应该从另一个 bean 调用。问题是您正在从 RestController 调用回退方法。