赞
踩
第三方系统调用我方系统@FeignClient接口时报错 com.netflix.hystrix.exception.HystrixRuntimeException: WorkFlowTaskOperateService#processWorkFlowTaskSyncCallback(TaskProcessDTO) failed and no fallback available.
我方系统出现FeignException.
第三方调用者抛出的异常:HystrixRuntimeException
一检查我们系统确实没有指定fallback和configuration,并且调用方开启了feign.hystrix.enabled: true
@FeignClient(value = "taxplan-workflow")
修改方法:
第三方调用在Application.java添加处理Feign异常的全局处理方法
- @Bean
- public Feign.Builder feignBuilder() {
- return Feign.builder().requestInterceptor(new RequestInterceptor() {
- @Override
- public void apply(RequestTemplate requestTemplate) {
- Map<String, String> customHeaders = WebUtils.getCustomHeaders();
- customHeaders.forEach((k, v) -> {
- requestTemplate.header(k, v);
- });
- }
- }).errorDecoder(new CustomErrorDecoder());
- }
这里使用了RequestInterceptor拦截器,可以定制请求头,如果不想定制,可以改为
return Feign.builder().errorDecoder(new CustomErrorDecoder());
实现ErrorDecoder接口,其中ExceptionCode是枚举类.
- public Exception decode(String methodKey, Response response) {
- if (response.status() >= 400 && response.status() <= 499) {
- return new BaseBizException(ExceptionCode.CALL_INNER_ERROR, "Client error.httpStatusCode:" + response.status());
- } else {
- if (response.status() >= 500 && response.status() <= 599 && response.body() != null) {
- try {
- String content = CharStreams.toString(new InputStreamReader(response.body().asInputStream(), StandardCharsets.UTF_8));
- Map responseBody = (Map) JSONObject.parseObject(content, Map.class);
- if (responseBody.containsKey("code")) {
- return new BaseBizException(responseBody.get("code").toString(), Objects.toString(responseBody.get("msg")));
- }
- } catch (Exception var5) {
- }
- }
-
- return new BaseBizException(ExceptionCode.CALL_INNER_ERROR);
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
ExceptionCode枚举类如下:可以自定义增加删除
- public enum ExceptionCode {
- ILLEGAL_STATE(4001, "非法访问"),
- PARAM_REQUIRED(4002, "参数不能为空"),
- PARAM_FORMAT_ILLEGAL(4003, "参数格式错误"),
- REQUEST_DATA_DUPLICATION(4004, "重复请求"),
- REQUEST_DATA_ERROR(4005, "请求数据错误"),
- REQUEST_DATA_NOT_MATCH(4006, "请求数据不一致"),
- RECORD_NOT_EXIST(5001, "记录不存在"),
- RECORD_EXISTED(5002, "记录已存在"),
- RECORD_ILLEGAL_STATE(5003, "数据异常"),
- BALANCE_NOT_ENOUGH(5103, "余额不足"),
- CALL_INNER_ERROR(5800, "调用内部服务接口异常"),
- THIRD_PART_ERROR(5801, "调用第三方接口异常"),
- SYSTEM_ERROR(9999, "系统异常");
-
- public final int code;
- public final String defaultMessage;
-
- private ExceptionCode(int code, String defaultMessage) {
- this.code = code;
- this.defaultMessage = defaultMessage;
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
参考:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。