bug记录——设置了feign的fallback,但是没有生效

问题描述

feign的代码

java 复制代码
package com.tianju.order.feign;

import com.tianju.order.feign.fallback.StorageFallback;
import com.tinaju.common.dto.GoodsDto;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@FeignClient(name = "storage-server",fallback = StorageFallback.class)
public interface StorageFeign {
    @GetMapping("/findByCode")
    GoodsDto findByCommodityCode(@RequestParam("code") String code);

    @GetMapping("/subByCode")
    boolean subByCommodityCode(@RequestParam("code") String code,
                               @RequestParam("nums") Integer nums);
}

feign的fallback方法

java 复制代码
package com.tianju.order.feign.fallback;

import com.tianju.order.feign.StorageFeign;
import com.tinaju.common.dto.GoodsDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class StorageFallback implements StorageFeign {
    @Override
    public GoodsDto findByCommodityCode(String code) {
        return null;
    }

    @Override
    public boolean subByCommodityCode(String code, Integer nums) {
        log.info("调用减库存方法失败,商品编码为{},数量为{}",code,nums);

        return false;
    }
}

问题分析

查了一下别人的解决方案,有些人说是要打开hystrix的支持

yaml 复制代码
# 配置 Feign 远程调用
feign:
  hystrix:
    # 为 Feign 开启 Hystrix熔断机制,就可以使用回调
    enabled: true

我的配置文件里面确实没有加feig相关的依赖,但是我并没有是有hystrix,突然想到这个fallback既然是一个降级的方法,那必然需要有人负责调用它,而hystrix作为熔断降级的组件,应该就是负责这件事情的。

所以需要引入熔断降级的相关组件。

解决方案

我这里使用阿里巴巴的sentinel熔断降级工具,具体解决该问题的流程如下:

1.引入依赖

xml 复制代码
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

2.进行配置

yaml 复制代码
spring:
  # 激活common模块的配置,关于nacos等
  profiles:
    active: common

  # 项目名
  application:
    name: order-service


# 打开阿里的 sentinel
feign:
  sentinel:
    enabled: true

3.解决结果

总结

1.需要引入依赖,比如Hystrix,或者sentinel这样的熔断降级的组件;

2.进行配置,打开feign的支持;

3.正确写注解:@FeignClient(name = "storage-server",fallback = StorageFallback.class);

相关推荐
cainiao0806055 分钟前
Java 大视界:基于 Java 的大数据可视化在智慧城市能源消耗动态监测与优化决策中的应用(2025 实战全景)
java
Q_Q51100828520 分钟前
python的婚纱影楼管理系统
开发语言·spring boot·python·django·flask·node.js·php
长风破浪会有时呀32 分钟前
记一次接口优化历程 CountDownLatch
java
云朵大王1 小时前
SQL 视图与事务知识点详解及练习题
java·大数据·数据库
我爱Jack1 小时前
深入解析 LinkedList
java·开发语言
一线大码2 小时前
Gradle 高级篇之构建多模块项目的方法
spring boot·gradle·intellij idea
27669582923 小时前
tiktok 弹幕 逆向分析
java·python·tiktok·tiktok弹幕·tiktok弹幕逆向分析·a-bogus·x-gnarly
用户40315986396633 小时前
多窗口事件分发系统
java·算法
用户40315986396633 小时前
ARP 缓存与报文转发模拟
java·算法
小林ixn3 小时前
大一新手小白跟黑马学习的第一个图形化项目:拼图小游戏(java)
java