feign hystrix 熔断器的 fallback 类的熔断方法异常触发,及查看异常方法

明明正常调用生产者方法执行成功了,但是熔断器还会触发,时不时的就触发一次,折腾了一下午,终于发现原因:

 

应用启动后就立即执行了方法,应该稍微等待,等它完全运行

 

另外:查看降级熔断原因,使用fallbackfactory自带的create方法

@FeignClient(name = "service-vod",fallbackFactory = VodFallbaclFactory.class)
@Component
public interface VodConsumer {

    @DeleteMapping("/service-vod/video/{id}")
    public R removeVideoById(@PathVariable("id") String id);

    @DeleteMapping("/id/list")
    public R removeVideoByIds(@RequestBody List<String> idList);
}

 

@Component
public class VodFallbaclFactory implements FallbackFactory<VodConsumer> {
    @Override
    public VodConsumer create(Throwable throwable) {
        return new VodConsumer() {
            @Override
            public R removeVideoById(String id) {
                System.out.println("removeById:" + throwable.getStackTrace() + throwable.getMessage() + throwable.fillInStackTrace());
                return null;
            }

            @Override
            public R removeVideoByIds(List<String> idList) {
                return null;
            }
        };
    }
}

注意:@FeignClient 加上fallbackfactory后,不要再使用fallback,不然会优先fallback,无法查看异常

 

Feign结合Hystrix熔断时间配置通常在Feign客户端的配置中完成。具体来说,可以通过配置`hystrix.command.default`属性来设置熔断时间。以下是一个配置示例: ```java @Configuration public class FeignConfig { @Bean public Feign.Builder feignBuilder() { return Feign.builder() .encoder(new JacksonEncoder()) .decoder(new JacksonDecoder()) .requestInterceptor(template -> template.header("Accept", "application/json")) .options(new Request.Options(5000, 10000)); // 连接超时和读取超时设置 } @Bean @ConfigurationProperties(prefix = "hystrix.command.default") public HystrixPropertiesConfig hystrixProperties() { return new HystrixPropertiesConfig(); } @ConfigurationProperties(prefix = "hystrix.threadpool.default") @Bean public ThreadPoolTaskExecutor threadPoolTaskExecutor() { return new ThreadPoolTaskExecutor(); } public static class HystrixPropertiesConfig { private int executionTimeoutInMilliseconds = 1000; // 默认超时时间 public int getExecutionTimeoutInMilliseconds() { return executionTimeoutInMilliseconds; } public void setExecutionTimeoutInMilliseconds(int executionTimeoutInMilliseconds) { this.executionTimeoutInMilliseconds = executionTimeoutInMilliseconds; } } } ``` 在这个配置中,`hystrixProperties`是一个bean,通过`@ConfigurationProperties`注解绑定配置文件中的`hystrix.command.default`属性。其中,`executionTimeoutInMilliseconds`属性就是设置熔断超时时间的配置项。 在`application.properties`或者`application.yml`文件中进行相应的配置: ```properties # application.properties 示例 hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=1000 ``` 或者使用yaml格式: ```yaml # application.yml 示例 hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 1000 ``` 这里配置的`timeoutInMilliseconds`就是熔断器打开的超时时间,也就是当服务调用超过这个时间没有响应时,Hystrix触发熔断逻辑。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值