java 未调用Hystrix回退方法

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

我在尝试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);
    }
}

字符串

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是方面

@Bean
@Primary
@Order(value= Ordered.HIGHEST_PRECEDENCE)
public HystrixCommandAspect hystrixAspect() {
    return new HystrixCommandAspect();
}

字符串

相关问题