gpt4 book ai didi

java - ZuulFallbackProvider 没有被调用

转载 作者:行者123 更新时间:2023-11-30 06:29:26 25 4
gpt4 key购买 nike

如果 Zuul 找不到服务,我会尝试进行后备。我有一个 ZuulSever,代码如下:

@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 "*";
}

};
}
}

当我的 route 的服务启动并运行时,我能够获得输出。但是,当我关闭路由中的服务时,我预计回退会启动。但我仍然看到一条错误消息,而不是回退消息。为什么没有调用后备?我正在使用 Dalston Release 版本。

最佳答案

如果您将 Zuul 配置为直接连接到路由的 URL,它将使用 SimpleHostRoutingFilter,在发生错误时(几乎)总是返回 500。任何 FallbackProvider 都不会启动。

我使用了自定义的 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);
}
}

关于java - ZuulFallbackProvider 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46424214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com