java 未调用Hystrix回退方法

hvvq6cgz  于 2023-08-01  发布在  Java
关注(0)|答案(6)|浏览(183)

我在尝试Hystrix的后备方法。在localhost:8082上,客户服务正在运行,它返回客户的名称。
如果客户服务关闭,则应调用fallback方法。但这并没有发生。
下面是代码片段。
请建议。

  1. @SpringBootApplication
  2. @EnableDiscoveryClient
  3. @EnableCircuitBreaker
  4. @RestController
  5. public class DemoHystrixApplication {
  6. @GetMapping("/")
  7. public String name() {
  8. String str = getCustomerName();
  9. return str;
  10. }
  11. @HystrixCommand(fallbackMethod = "getFallbackCustomerName")
  12. private String getCustomerName() {
  13. RestTemplate restTemplate = new RestTemplate();
  14. URI uri = URI.create("http://localhost:8082");
  15. return restTemplate.getForObject(uri, String.class);
  16. }
  17. private String getFallbackCustomerName() {
  18. System.out.println("coming inside fallback method");
  19. return "Resillient Customer";
  20. }
  21. public static void main(String[] args) {
  22. SpringApplication.run(DemoHystrixApplication.class, args);
  23. }
  24. }

字符串

yftpprvb

yftpprvb1#

这两种方法,即实际方法和备用方法应该是公共的,并将这些方法移动到一个单独的类中,并使用@Component对其进行注解。
给予一试,希望有帮助。

oxiaedzo

oxiaedzo2#

你的@HystrixCommand注解方法应该是public的。我不确定回退方法,但我也会将其设置为公共。

qjp7pelc

qjp7pelc3#

这是因为AOP。
Spring容器在注入bean时注入aspect-aware bean。
当应用户请求调用name()函数时,将调用支持方面的bean的方法,因此注解可以正常工作。
但是,直接在name()中调用this.getCustomerName()会在原始bean被 Package 到代理中之前调用原始bean上的getCustomerName()。它不知道方面。因此,注解不起作用。

egdjgwm8

egdjgwm84#

如果你添加了netflix-hystrix的依赖项,并且有dev-tools在执行服务时获取更改,你也可以尝试停止和启动服务。

a7qyws3x

a7qyws3x5#

应该从另一个bean调用Fallback方法。问题是您正在从RestController调用回退方法。

zujrkrfu

zujrkrfu6#

您可以尝试这一点,因为HystrixComman是方面

  1. @Bean
  2. @Primary
  3. @Order(value= Ordered.HIGHEST_PRECEDENCE)
  4. public HystrixCommandAspect hystrixAspect() {
  5. return new HystrixCommandAspect();
  6. }

字符串

相关问题