我在尝试Hystrix的后备方法。在localhost:8082上,客户服务正在运行,它返回客户的名称。
如果客户服务关闭,则应调用fallback方法。但这并没有发生。
下面是代码片段。
请建议。
@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);
}
}
字符串
6条答案
按热度按时间yftpprvb1#
这两种方法,即实际方法和备用方法应该是公共的,并将这些方法移动到一个单独的类中,并使用@Component对其进行注解。
给予一试,希望有帮助。
oxiaedzo2#
你的@HystrixCommand注解方法应该是public的。我不确定回退方法,但我也会将其设置为公共。
qjp7pelc3#
这是因为AOP。
Spring容器在注入bean时注入aspect-aware bean。
当应用户请求调用
name()
函数时,将调用支持方面的bean的方法,因此注解可以正常工作。但是,直接在
name()
中调用this.getCustomerName()
会在原始bean被 Package 到代理中之前调用原始bean上的getCustomerName()
。它不知道方面。因此,注解不起作用。egdjgwm84#
如果你添加了netflix-hystrix的依赖项,并且有dev-tools在执行服务时获取更改,你也可以尝试停止和启动服务。
a7qyws3x5#
应该从另一个bean调用Fallback方法。问题是您正在从RestController调用回退方法。
zujrkrfu6#
您可以尝试这一点,因为HystrixComman是方面
字符串