Java ZuulFallbackProvider未被调用

Java ZuulFallbackProvider未被调用,java,spring,spring-boot,netflix-zuul,hystrix,Java,Spring,Spring Boot,Netflix Zuul,Hystrix,如果Zuul找不到服务,我会尝试后退。我有一个Zulsever,代码如下: @SpringBootApplication @EnableZuulProxy @EnableDiscoveryClient public class ZuulServerApplication { public static void main(String[] args) { SpringApplication.run(ZuulServerApplication.class, args);

如果Zuul找不到服务,我会尝试后退。我有一个Zulsever,代码如下:

@SpringBootApplication
@EnableZuulProxy
@EnableDiscoveryClient
public class ZuulServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ZuulServerApplication.class, args);
    }

    @Bean
    public ZuulFallbackProvider fallBackProvider() {
        return new ZuulFallbackProvider() {

            @Override
            public ClientHttpResponse fallbackResponse() {

                return new ClientHttpResponse() {
                    @Override
                    public HttpHeaders getHeaders() {
                        return null;
                    }
                    @Override
                    public InputStream getBody() throws IOException {
                        return new ByteArrayInputStream("Hello".getBytes());
                    }

                    @Override
                    public String getStatusText() throws IOException {
                        // TODO Auto-generated method stub
                        return "Service Down";
                    }

                    @Override
                    public HttpStatus getStatusCode() throws IOException {
                        // TODO Auto-generated method stub
                        return HttpStatus.OK;
                    }

                    @Override
                    public int getRawStatusCode() throws IOException {
                        // TODO Auto-generated method stub
                        return 200;
                    }

                    @Override
                    public void close() {
                        // TODO Auto-generated method stub

                    }
                };
            }

            @Override
            public String getRoute() {
                // TODO Auto-generated method stub
                return "*";
            }

        };
    }
}

当我路由中的服务启动并运行时,我能够获得输出。但是,当我在路线上取消服务时,我预计会出现倒退。但我仍然看到一条错误消息,而不是回退消息。为什么不调用回退?我使用的是Dalston发行版。

如果您将Zuul配置为直接连接到路由的URL,它将使用SimpleHostRoutingFilter,在出现错误时(几乎)总是返回500。任何后备提供商都不会介入

我使用了自定义SimpleHostRoutingFilter:

public class CustomErrorHostRoutingFilter extends SimpleHostRoutingFilter {
    public CustomErrorHostRoutingFilter(ProxyRequestHelper helper, ZuulProperties properties, ApacheHttpClientConnectionManagerFactory connectionManagerFactory, ApacheHttpClientFactory httpClientFactory) {
        super(helper, properties, connectionManagerFactory, httpClientFactory);
    }

    @Override
    protected ZuulException handleException(Exception ex) {
        if (ex instanceof ConnectTimeoutException) {
            return new ZuulException(ex, "Downstream timeout", HttpServletResponse.SC_GATEWAY_TIMEOUT, ex.getMessage());
        }

        if (ex instanceof IOException) {
            return new ZuulException(ex, "Downstream I/O error", HttpServletResponse.SC_SERVICE_UNAVAILABLE, ex.getMessage());
        }

        return super.handleException(ex);
    }
}
还需要某种配置类:

@Configuration
@EnableZuulProxy
public class ZuulConfiguration {

    @Bean
    public SimpleHostRoutingFilter simpleHostRoutingFilter(ProxyRequestHelper helper,
                                                           ZuulProperties zuulProperties,
                                                           ApacheHttpClientConnectionManagerFactory connectionManagerFactory,
                                                           ApacheHttpClientFactory httpClientFactory) {
        return new CustomErrorHostRoutingFilter(helper, zuulProperties, connectionManagerFactory, httpClientFactory);
    }
}

ZuulFallbackProvider中的
getRoute
方法在哪里?您使用的是哪个版本?我已经更新了代码。您从zuul收到了什么错误消息?zuul没有具体的错误消息。请求失败,出现500个错误,如果没有回退,这将是预期的行为。