如何为多个zuul路由实现多个zuulFallbackProvider。 我无法看到如何使用除暴露restcontroller之外的属性并使用hystrix命令实现方法的答案。
我可以使用自己的zuulFallBackProvider bean制作我的每项服务吗?
application.yml
server:
port: 8080
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 20000
ribbon:
ReadTimeout: 20000
ConnectTimeout: 20000
zuul:
prefix: /api
ignoredServices: '*'
host:
connect-timeout-millis: 20000
socket-timeout-millis: 20000
routes:
kicks-service:
path: /kicks/**
serviceId: kicks-service
stripPrefix: false
sensitiveHeaders:
kicks-inventory:
path: /inventory/**
serviceId: kicks-inventory
stripPrefix: false
sensitiveHeaders:
这是我的示例应用
@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProxy
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
@Bean
public Prefilter prefilter(){
return new Prefilter();
}
@Bean
public ZuulFallbackProvider zuulFallbackProvider() {
return new ZuulFallbackProvider() {
@Override
public String getRoute() {
return "kicks-inventory";
}
@Override
public ClientHttpResponse fallbackResponse() {
return new ClientHttpResponse() {
@Override
public HttpStatus getStatusCode() throws IOException {
return HttpStatus.OK;
}
@Override
public int getRawStatusCode() throws IOException {
return 200;
}
@Override
public String getStatusText() throws IOException {
return "OK";
}
@Override
public void close() {
}
@Override
public InputStream getBody() throws IOException {
return new ByteArrayInputStream("fallback".getBytes());
}
@Override
public HttpHeaders getHeaders() {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
return headers;
}
};
}
};
}
}
答案 0 :(得分:2)
每条路线都需要一个单独的豆子。他们应该为getRoute方法返回不同的路由。
请检查一下 - http://tachniki.blogspot.in/2017/02/generic-ZuulFallbackProvider.html。希望它会让它稍微容易些。
答案 1 :(得分:1)
您可以为所有路由设置默认回退提供程序,否则每个路由都需要一个回退提供程序。
如果您想为所有路线提供默认回退 你可以创建一个{{1}}类型的bean并拥有 getRoute方法返回*或null。