Spring cloud 在跨服务调用(feign)时 开启熔断器 (hystrix)获取报错信息 返回友好提示

43 阅读1分钟

在开启熔断器后 如果 跨服务失败 调用某个方法 处理一些 事情 使用

@FeignClient(name = “logs-service”, fallback = LogFall.class)

fallback 这个属性 是不可以获取 错误信息 只能给予友好提示 等等

1.png

如果需要获取 错误信息 则使用

@FeignClient(name = “logs-service”, fallbackFactory = LogsFallbackFactory.class)

fallbackFactory 这个属性

2.png

然后 在 LogsFallbackFactory.class 类中 写具体 获取 错误信息的程序

package com.erp.init.feign.fallback.log;

import com.erp.api.entities.logs.YsHandleLog;
import com.erp.api.out.R;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * User: Json
 * <p>
 * Date: 2022/3/10
 **/
@Slf4j
@Component
public class LogsFallbackFactory implements FallbackFactory<LogFall> {

    @Override
    public LogFall create(Throwable cause) {
        return new LogFall() {
            @Override
            public R save(YsHandleLog ysHandleLog) {
              //  log.info("" + JSONObject.toJSONString(ysHandleLog));
                // 异常抛出
                log.error("【跨log服务调用异常】"+cause.getMessage(),cause);
                return null;
            }
        };
    }
}
package com.erp.init.feign.fallback.log;

import com.erp.api.entities.logs.YsHandleLog;
import com.erp.api.out.R;
import com.erp.init.feign.LogFeign;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * User: Json
 * <p>
 * Date: 2022/3/11
 **/
@Slf4j
@Component
public class LogFall implements LogFeign {
    @Override
    public R save(YsHandleLog ysHandleLog){
        return null;
    }
}

在这个类里 在去重写 fallback 这个属性对应的类 方法

根据个人需求 更改 也可以不实现

因为 fallback 和 fallbackFactory 这两个属性 不能共同使用

如果都需要 可以仿照 以上写法