Spring Boot 自定义错误解码器停止工作|伪豪Pig

g0czyy6m  于 2022-12-23  发布在  Spring
关注(0)|答案(1)|浏览(108)

错误解码器不工作。
我有2个微服务M1和M2。M1使用带有自定义ErrorDecoder的假客户端与M2通信。然后,如果M2不可用,我添加了Hystrix用于断路。
假冒客户:

@FeignClient(name = "M2", fallback = M2Client.Fallback.class)
public interface M2Client{

    @GetMapping("/api/v1/users/{id}")
    UserDTO getUserById(@PathVariable long id);
    
    //other endpoints

    @Component
    class Fallback implements M2Client{
        @Override
        public UserDTO getUserById(long id) {
            throw new MicroserviceException("Service is unavailable");
        }
}

错误解码器:

@Component
public class CustomErrorDecoder implements ErrorDecoder {

    @Override
    public Exception decode(String s, Response response) {
    //...
   }
}

但自定义ErrorDecoder停止工作,并且M2始终抛出错误,即调用回退

fykwrbwg

fykwrbwg1#

好吧,据我所知,有以下处理方式:
1.调用ErrorDecoder发生异常后

  1. ErrorDecoder调用回退后。
    所以我把fallback改为fallback工厂,只是在Fallback类中更远的地方抛出异常。
@Component
    class Fallback implements FallbackFactory<M2Client> {
        @Override
        public AuthenticationClient create(Throwable cause) {
            if (cause instanceof TimeoutException) {
                throw new MicroserviceException("Service is unavailable");
            }

            if (cause instanceof RuntimeException) {
                throw (RuntimeException) cause;
            } else {
                throw new RuntimeException("Unhandled exception: " + cause.getMessage());
            }
        }
    }

相关问题