2、记Hystrix熔断 @HystrixCommand 注解失效问题

2、记Hystrix熔断 @HystrixCommand 注解失效问题

HystrixCommand注解失效可能是由于@EnableHystrix注解也失效导致的。在4.x版本之后,Hystrix可能无效,因为无法扫描到Hystrix的配置。这可能是导致HystrixCommand注解无效的原因之一。

版本说明:

  • Spring Boot:3.0.9 Spring Boot:3.2.0
  • Spring Cloud:2022.0.4 Spring Cloud:2023.0.0
  • jdk:20 jdk:20

我这边的userService服务已停,为了测试Hystrix是否生效。

报错信息:

2024-01-10T21:40:01.890+08:00 ERROR 1796 --- [nio-8081-exec-1] o.a.c.c.C.[.[.[.[dispatcherServlet]      : Servlet.service() for servlet [dispatcherServlet] in context with path [/borrow] threw exception [Request processing failed: feign.FeignException$ServiceUnavailable: [503] during [GET] to [http://userService/user/getUser/1] [UserClient#getUserByUserId(int)]: [Load balancer does not contain an instance for the service userService]] with root cause

feign.FeignException$ServiceUnavailable: [503] during [GET] to [http://userService/user/getUser/1] [UserClient#getUserByUserId(int)]: [Load balancer does not contain an instance for the service userService]
	at feign.FeignException.serverErrorStatus(FeignException.java:265) ~[feign-core-12.4.jar:na]
	at feign.FeignException.errorStatus(FeignException.java:206) ~[feign-core-12.4.jar:na]
	at feign.FeignException.errorStatus(FeignException.java:194) ~[feign-core-12.4.jar:na]
	at feign.codec.ErrorDecoder$Default.decode(ErrorDecoder.java:104) ~[feign-core-12.4.jar:na]
	at feign.ResponseHandler.decodeError(ResponseHandler.java:136) ~[feign-core-12.4.jar:na]
	at feign.ResponseHandler.handleResponse(ResponseHandler.java:70) ~[feign-core-12.4.jar:na]
	at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:114) ~[feign-core-12.4.jar:na]

Controller 层代码:

@RestController
public class BorrowController {

    @Resource(name = "borrowService")
    BorrowService borrowService;

    @HystrixCommand(fallbackMethod = "getUserBorrowsFallback")
    @GetMapping(value = "/getBorrows/{user_id}")
    public UserBorrowDetail getUserBorrows(@PathVariable("user_id")int user_id){
        return borrowService.getUserBorrowDetailByUserId(user_id);
    }

    // 备选方案,这里直接返回空列表
    // 注意参数和返回值要和上面的一致
    public UserBorrowDetail getUserBorrowsFallback(int user_id){
        return new UserBorrowDetail(null, Collections.emptyList());
    }
}

启动类:

@SpringBootApplication
@EnableFeignClients         // Feign实现负载均衡

@EnableHystrix              // 启用Hystrix
public class BorrowApplication {
    public static void main(String[] args) {
        SpringApplication.run(BorrowApplication.class,args);
    }
}

解决办法:定义一个配置类,让相关缺少的配置生效

@Configuration
public class MyHystrixConfig {
    /**
     * 用来拦截处理HystrixCommand注解
     * @return
     */
    @Bean
    public HystrixCommandAspect hystrixCommandAspect() {
        return new HystrixCommandAspect();
    }
}

具体文章参考大佬所著:链接: https://blog.csdn.net/Jason_2020/article/details/130110355

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值