feign调用和全局拦截

先做个feign调用方法

@Component
@RequestMapping("fegin")
@FeignClient(value = "fegin-server", fallbackFactory = ServerFeignFallbackFactory.class)
public interface EdgeServerDingTalkFeign {

    /**
     * 根据用户id获取用户详情
     */
    @GetMapping("member/detail")
    OapiUserGetResponse fetchMemberDetail(@RequestParam String userId);
}

然后异常捕获

ServerFeignFallbackFactory

@Slf4j
@Component
public class ServerFeignFallbackFactory implements FallbackFactory<ServerFeign> {

    private final RestApiException feignException = RestApiException.error(ErrCode.FEIGN_REST_FALLBACK, "feign fallback exception");

    @Override
    public ServerFeign create(Throwable throwable) {

        return new ServerFeign() {

          
            @Override
            public OapiUserGetResponse fetchMemberDetail(String userId) {
                log.error("fetchMemberDetail feign error", throwable);
                throw feignException;
            }
        };
    }
}

 

第二种方法做个自定义注解去拦截

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface FeignExceptionApi {

}
@Slf4j
@Aspect
@Component
public class FeignExceptionApiAspect {

    @Around(value = "(@annotation(feignExceptionApi) || @within(feignExceptionApi))")
    Object around4Method(ProceedingJoinPoint joinPoint, FeignExceptionApi feignExceptionApi){
        Object proceed = null;
        try {
            proceed = joinPoint.proceed();
        } catch (Throwable throwable) {
            Throwable t = Optional.ofNullable(throwable.getCause()).orElseGet(() -> new Throwable("未知异常"));
            log.error("FeignException:{},原因:{}", throwable.getMessage(), t.getMessage());
            throw FeignRequestException.error("子系统调用异常");
        }
        return proceed;
    }
}

 

构造实体类

@EqualsAndHashCode(callSuper = true)
@Data
@Builder
public class FeignRequestException extends RuntimeException {

    private String errMsg;

    public static FeignRequestException error(String errMsg) {
        return FeignRequestException.builder()
                .errMsg(errMsg)
                .build();
    }
}

调用feign的方法加上注解\@FeignExceptionApi

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值